C# EFCache CachingProviderServices缺少静态实例属性
我试图在.NET 4.5项目中使用EFCache NuGet程序包(),在启动时遇到以下错误:C# EFCache CachingProviderServices缺少静态实例属性,c#,entity-framework-6,C#,Entity Framework 6,我试图在.NET 4.5项目中使用EFCache NuGet程序包(),在启动时遇到以下错误: System.InvalidOperationException HResult=0x80131509 Message=The Entity Framework provider type ' EFCache.CachingProviderServices, EFCache, Version=1.1.3.0, Culture=neutral, PublicKeyToken=46c4868af4307
System.InvalidOperationException
HResult=0x80131509
Message=The Entity Framework provider type '
EFCache.CachingProviderServices, EFCache, Version=1.1.3.0,
Culture=neutral, PublicKeyToken=46c4868af4307d2c' did not have a static
property or field named 'Instance'. Entity Framework providers must
declare a static property or field named 'Instance' that returns the
singleton instance of the provider.
EFCache.CachingProviderServices扩展了System.Data.Entity.Core.Common.DbProviderServices,它没有静态实例属性。因此,似乎在所有情况下,这个属性都不一定存在
查看EFCache.CachingProviderServices的代码,我看不出有任何合理的方式使其具有静态实例属性,因为它的目的是作为另一个DBProviderServices实例的包装器,该实例作为构造函数参数传递
任何让EFCache使用实体框架的人对发生的事情有什么想法吗
EFCache版本为1.1.3.0。我在EntityFramework6.1.0和6.2.0中也看到了同样的问题。Web.config部分如下所示:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="EFCache.CachingProviderServices, EFCache" />
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.11.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
该问题是由配置文件中的以下行引起的:
<provider invariantName="MySql.Data.MySqlClient" type="EFCache.CachingProviderServices, EFCache" />
它应该描述实际的db提供程序,对于MySQL,它通常如下所示:
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
<providers>
<provider invariantName="MySql.Data.MySqlClient" type="EFCache.CachingProviderServices, EFCache" />
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
<provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.11.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d" />
通常,如链接页面中所述,EFCache.CachingProviderServices
是包装提供程序,因此它不应该(也不能)注册为常规数据库提供程序(这要求它们提供异常中提到的静态实例
属性/字段)
相反,它必须通过自定义
DbConfiguration
或静态EntityFrameworkCache.Initialize()
方法激活,如中所述。谢谢,这是问题的关键部分。另一部分是,我在解析配置字符串时遇到了一个错误,关于“无效密钥”端口。这可以追溯到这样一个事实,即实现DbConfiguration的类还需要专门指向MySql组件。