提供商' SqlServer-20'没有元数据信息。

时间:2016-11-18 08:43:25

标签: c# .net sql-server .net-core quartz.net

我想测试Quartz.NET 3.0 for .NET Core的SQL数据库功能。很遗憾,我无法正确配置StdSchedulerFactory,我在调用StdSchedulerFactory.GetScheduler时总是遇到以下异常:

System.ArgumentOutOfRangeException: 
There is no metadata information for provider 'SqlServer-20'
Parameter name: providerName
   at Quartz.Impl.AdoJobStore.Common.DbProvider.GetDbMetadata(String providerName)
   at Quartz.Impl.AdoJobStore.Common.DbProvider..ctor(String dbProviderName, String connectionString)
   at Quartz.Impl.StdSchedulerFactory.<Instantiate>d__66.MoveNext()

我已使用以下值配置工厂:

var configuration = new NameValueCollection
{
    { "quartz.jobStore.type", "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" },
    { "quartz.jobStore.driverDelegateType", "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" },
    { "quartz.jobStore.tablePrefix", "QRTZ_" },
    { "quartz.jobStore.dataSource", "default" },
    { "quartz.dataSource.default.connectionString", "Server=(localdb)\\mssqllocaldb;Database=QuartzTest;Trusted_Connection=True;MultipleActiveResultSets=true" },
    { "quartz.dataSource.default.provider", "SqlServer-20" },
    { "quartz.jobStore.useProperties", "true" },
    { "quartz.serializer.type", "json" }
};

var schedulerFactory = new StdSchedulerFactory(configuration);

如您所见,我目前的目标是LocalDB(v12.0.2000)。我也在SQL Server Express上检查了它 - 结果相同。

如何避免此异常?

  • 我是否遗漏了我应该配置的任何属性?
  • 我是否必须为数据库提供一些数据?我只执行了tables_sqlServer.sql脚本。
  • SqlServer-20数据库驱动程序应作为.NET 3.5的一部分安装,还是需要单独安装?
  • Quartz.NET目前不支持.NET Core的这项功能吗?我使用的是3.0.0-alpha2版本。
  • 我应该定位其他NuGet套餐吗?我引用了Quartz和Quartz.Serialization.Json

3 个答案:

答案 0 :(得分:6)

目前根据beta1的更新日志,提供商没有版本。因此,正确的SqlServer提供程序配置是:

["quartz.dataSource.sqlserver.provider"] = "SqlServer"

来源:https://github.com/quartznet/quartznet/blob/e3ff6936ea1a76480b7671e2b5c468c1b67f4897/changelog.md#release-30-beta-1-oct-8-2017

答案 1 :(得分:2)

我的一位朋友刚刚找到答案:根据this example on Github,您必须在.NET Core项目中使用SqlServer-41而不是SqlServer-20

答案 2 :(得分:0)

View