如何使Quartz.NET AdoJobStore与Entity Framework一起使用?

时间:2014-08-27 10:21:34

标签: entity-framework quartz.net

  • .NET 4.51
  • 实体框架6.x

我有一个单独的项目/程序集,它包含了核心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"}

那我在这里错过了什么?我需要做些什么来改变这项工作?

1 个答案:

答案 0 :(得分:4)

Quartz不支持插入Entity Framework基础架构,它可以在没有外部框架的情况下运行。 Quartz的提供者与ADO.NET的提供者基础结构不同。您可以在Example 13中看到AdoJobStore的编程配置示例。所以正确的值是 SqlServer-20

您还可以通过提供参数 connectionStringName 来配置连接字符串,Quartz将从connectionStrings部分查找该命名连接字符串。