小编xer*_*him的帖子

如何获取 Quartz Job 的 JobKey / JobDetail

我无法理解如何使用 Quartz 2.3.2 版获取作业的详细信息。

到目前为止,我们使用 Quartz v1.0.x 进行作业,我必须将其升级到最新版本。

这是我们过去获取作业详细信息的方式:

JobDetail job = scheduler.GetJobDetail(task.Name, groupName);
Run Code Online (Sandbox Code Playgroud)

在 2.3.2 版本中,该方法GetJobDetail()不再具有接受 2 个参数的构造函数......相反,它接受一个JobKey参数。

不幸的是,我找不到获得单个 JobKey 的方法。我尝试的是以下内容:

string groupName = !string.IsNullOrEmpty(task.GroupNameExtension) ? task.GroupNameExtension : task.GroupName;
var jobkeys = quartzScheduler.GetJobKeys(GroupMatcher<JobKey>.GroupContains(groupName));
var jobkey = jobkeys.Single(x => x.Name == task.Name);
var jobDetail = quartzScheduler.GetJobDetail(jobkey);
Run Code Online (Sandbox Code Playgroud)
  • 这是实现它/获取jobKey的正确方法吗?(在线路上总是只有一个工作键var jobkey = jobkey.Single(...)吗?
  • 如果不先获得所有的 JobKey ,真的没有办法获得 JobDetail吗?
  • 这是 Quartz 希望我们获取 JobDetail 的方式还是有更好/更简单的方法?

提前致谢

.net c# quartz-scheduler quartz.net

4
推荐指数
1
解决办法
9652
查看次数

FakeItEasy 配置 fake 以在下次调用时抛出异常并返回值

我们必须实施重试机制。

为了测试RetryProvider,我想要一个假的类在前两次调用时抛出异常,但在第三次调用时返回一个有效的对象。

在正常情况下(不抛出异常)我们可以使用 A.CallTo(() => this.fakeRepo.Get(1)).ReturnsNextFromSequence("a", "b", "c");

我想要类似的东西:

  • 第一次调用: throw new Exception();
  • 第二次调用: throw new Exception();
  • 第三次调用:返回“成功”;

我如何配置我的假货来做到这一点?

提前致谢

.net c# unit-testing mocking fakeiteasy

4
推荐指数
2
解决办法
1694
查看次数

Entity Framework Core:将可为空列迁移到必需列时的默认值

我有一个datetime2专栏,以前是nullable
我们现在需要设置此列,因此我们希望根据需要进行设置,并使用默认值 1970-1-1 迁移该列。

我已创建迁移并将迁移文件编辑为以下内容:

protected override void Up(MigrationBuilder migrationBuilder)
    {
        migrationBuilder.AlterColumn<DateTime>(
            name: "Start",
            table: "Project",
            nullable: false,
            oldClrType: typeof(DateTime),
            oldType: "datetime2",
            oldNullable: true, 
            defaultValue: new DateTime(1970, 1, 1));
    }
Run Code Online (Sandbox Code Playgroud)

我已经手动添加了该defaultValue: new DateTime(1970, 1, 1));行。

不幸的是,在更新数据库时出现以下错误:

2021-03-22 10:12:55.5398:“UpdateDatabase”中发生错误:Microsoft.Data.SqlClient.SqlException(0x80131904):无法将值 NULL 插入表“dbo.Project”的“Start”列;列不允许为空。更新失败。该语句已终止。

我也尝试通过设置值,defaultValueSql但出现了同样的错误:

defaultValueSql: "'1970-1-1'"
Run Code Online (Sandbox Code Playgroud)

为什么 defaultValue 不起作用,我做错了什么吗?

提前致谢

顺便说一句:这是执行的脚本:

DECLARE @var0 sysname;
SELECT @var0 = [d].[name]
FROM [sys].[default_constraints] [d]
INNER JOIN [sys].[columns] [c] ON [d].[parent_column_id] = [c].[column_id] AND [d].[parent_object_id] = [c].[object_id]
WHERE ([d].[parent_object_id] …
Run Code Online (Sandbox Code Playgroud)

c# sql-server entity-framework entity-framework-core .net-core

4
推荐指数
1
解决办法
4348
查看次数

在构造函数中解决虚拟成员调用

我有一个抽象类:

public abstract class ExampleBase : IExampleBase
{
    protected ExampleBase() 
    {
        this.SetupData();
    }

    protected abstract Dictionary<int, Adress> RelevantData { get; set; }

    protected abstract void SetupData();

    public void ProcessData() 
    {
        // use RelevantData
    }
}
Run Code Online (Sandbox Code Playgroud)

派生类:

public class Example : ExampleBase
{
    public Example()
    {
    }

    protected override void SetupData()
    {
        this.RelevantData = new Dictionary<int, Adress>
        { 1, new Adress { ... } },
        { 2, new Adress { ... } }
    }
}
Run Code Online (Sandbox Code Playgroud)

在基类中,ReSharper告诉我

虚构件成员调用

我知道由于执行顺序而调用该方法很危险..但是如何解决这个问题呢?

上下文:我想在每个派生类中设置数据,然后在基类中处理.我想SetupData() …

.net c# oop resharper

3
推荐指数
1
解决办法
2741
查看次数

使用 php 将 Wei 转换为 Ethereum

我正在尝试使用 php 和 bc-math 扩展将 wei 转换为 eth。

尝试使用此函数转换它时:

function wei2eth($wei)
{
    return bcdiv($wei,1000000000000000000,18);
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

警告:bcdiv():在 C:\xampp\htdocs\test\coindata.php 第 121 行被零除

有没有人使用 bc-math 扩展和 bcdiv 将 wei 转换为 eth 并知道,为什么我会收到此错误?

提前致谢

php bcmath ethereum

3
推荐指数
1
解决办法
2626
查看次数

无数据恢复数据库

我有一个非常大的数据库的备份.我想要的是恢复这个数据库,但我的硬盘上没有足够的空间.由于我不需要数据,有没有办法在没有数据的情况下恢复它?

我已经尝试编写架构等脚本,但是当我运行脚本时,它不能正常工作.

提前致谢

sql t-sql sql-server

3
推荐指数
1
解决办法
539
查看次数

测试自定义 JsonConverter 时出现异常

我们以一种奇怪的格式从 API 获取序列化日期时间,如下所示:/Date(1574487012797)/ 为了使用 反序列化这个值System.Text.Json,我们编写了自己的JsonConverter

public class DateTimeConverter : JsonConverter<DateTime>
{
    public override DateTime Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        var dateTimeString = reader.GetString();
        dateTimeString = dateTimeString.Replace("/Date(", "");
        dateTimeString = dateTimeString.Replace(")/", "");
        var epoch = Convert.ToInt64(dateTimeString);
        var dateTimeOffset = DateTimeOffset.FromUnixTimeMilliseconds(epoch);
        return dateTimeOffset.UtcDateTime;
    }

    public override void Write(Utf8JsonWriter writer, DateTime value, JsonSerializerOptions options)
    {
        writer.WriteStringValue(value.ToUniversalTime().ToString("yyyy'-'MM'-'dd'T'HH':'mm':'ssZ"));
    }
}
Run Code Online (Sandbox Code Playgroud)

我想为此转换器编写单元测试。我尝试的是以下内容:

public class DateTimeConverterTest
{
    private readonly DateTimeConverter testee;

    public DateTimeConverterTest()
    {
        this.testee = new DateTimeConverter();
    } …
Run Code Online (Sandbox Code Playgroud)

.net c# json .net-core-3.0 system.text.json

3
推荐指数
1
解决办法
1119
查看次数

VS2017未显示建议​​,无法导航到插入符号下的符号

我的Visual Studio遇到一些问题:

突然,它停止显示任何有用的建议。 artikelList包含articles许多属性,但显示的全部是:

在此处输入图片说明

此外,当我尝试通过ctrl+f12该方法执行方法时,显示以下错误消息:

在此处输入图片说明

我试图重新启动VS17,重新启动我的电脑,重新设置并重新安装VS17,但这没有帮助。

有人也有这些问题,并且知道如何解决吗?

提前致谢

.net c# visual-studio visual-studio-2017

2
推荐指数
1
解决办法
3057
查看次数

将对象转换为long

不幸的是,在我们的(遗留)代码库中,有一个类的属性具有类型object,可以是a int或a long.

当试图把它投射到像这样的长时间:

long id = (long) dBLockTabellenOptionen.Id;

我得到以下异常:

例外:DoOneWorkRound中的Fehler:
指定的强制转换无效.指定演员表无效. - >指定的强制转换无效.
--- Exception Liste ---
System.InvalidCastException:指定的强制转换无效.

如何在long没有异常的情况下将其保存为一个?

免责声明:我知道,这个属性是一个很大的气味,但此时,它的重构将是太多,因为这个应用程序将很快被重写,我们将立即做到这一点

.net c# casting

2
推荐指数
1
解决办法
79
查看次数

Angular:测试 Http POST 方法

我有一个简单的服务方法,可以调用http post添加 todoList:

add(event: any): Observable<TodoList> {
    let todoListToAdd: TodoList = { name: event.target.value, listItems: []};
    return this.http.post<TodoList>("https://localhost:44305/todolist", todoListToAdd);
}
Run Code Online (Sandbox Code Playgroud)

我想对这个方法进行单元测试并尝试如下:

import { TestBed, getTestBed } from '@angular/core/testing';
import { HttpClientTestingModule, HttpTestingController } from '@angular/common/http/testing';

import { TodolistService } from './todolist.service';
import { TodoList } from './todolist';
import { HttpResponse } from '@angular/common/http';

describe('TodolistService', () => {
  let injector: TestBed;
  let service: TodolistService;
  let httpMock: HttpTestingController;

  beforeEach(() => {
    TestBed.configureTestingModule({
      imports: [ HttpClientTestingModule ],
      providers: [ TodolistService ] …
Run Code Online (Sandbox Code Playgroud)

unit-testing karma-jasmine angular angular-unit-test angular-test

2
推荐指数
1
解决办法
1815
查看次数