我有一个单独的项目/程序集,它包含了核心Quartz.NET功能。我想以编程方式配置Quartz.NET以将信息保存到SQL Server。由于这是一个单独的程序集,App.config非常小,我想传入一个连接字符串。这是完整 App.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
</configuration>
这是我用来配置Quartz.NET的代码:
properties["quartz.scheduler.instanceName"] = "My Scheduler";
properties["quartz.scheduler.instanceId"] = "MySchedulerId";
properties["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz";
properties["quartz.jobStore.useProperties"] = "true";
properties["quartz.jobStore.dataSource"] = "default";
properties["quartz.dataSource.default.connectionString"] = aConnectionString;
properties["quartz.dataSource.default.provider"] = "System.Data.SqlClient";
properties["quartz.jobStore.tablePrefix"] = "QRTZ_";
aConnectionString的值是:
测试
"Data Source=.\\SQLEXPRESS;Initial Catalog=xxxxx;Integrated Security=True;MultipleActiveResultSets=True"
生产
server=sql.server.com;User Id=xxxx;password=xxx;Persist Security Info=True;database=xxxx" providerName="System.Data.SqlClient
但是,当我尝试调用GetScheduler()时,收到以下错误消息:
Could not Initialize DataSource: default
并且内部异常有:
{"There is no metadata information for provider 'System.Data.SqlClient'\r\nParameter name: providerName"}
那我在这里错过了什么?我需要做些什么来改变这项工作?
答案 0 :(得分:4)
Quartz不支持插入Entity Framework基础架构,它可以在没有外部框架的情况下运行。 Quartz的提供者与ADO.NET的提供者基础结构不同。您可以在Example 13中看到AdoJobStore的编程配置示例。所以正确的值是 SqlServer-20 。
您还可以通过提供参数 connectionStringName 来配置连接字符串,Quartz将从connectionStrings部分查找该命名连接字符串。