我正在尝试在.NET 4.5项目中使用EFCache NuGet软件包(https://github.com/moozzyk/EFCache),并在启动时遇到此错误:
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,后者没有静态的Instance属性。因此,似乎该属性不一定在所有情况下都存在。
查看EFCache.CachingProviderServices的代码,我看不到它具有静态实例属性的任何明智方法,因为它的目的是用作另一个DBProviderServices实例的包装,该实例作为构造函数参数传递
使用EFCache与Entity Framework一起工作的人是否对发生的事情有任何想法?
EFCache版本为1.1.3.0。我已经看到使用实体框架6.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>
答案 0 :(得分:2)
此问题是由配置文件中的以下行引起的:
<provider invariantName="MySql.Data.MySqlClient" type="EFCache.CachingProviderServices, EFCache" />
应该描述实际的数据库提供程序,对于MySQL,通常看起来像这样:
<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
是 wrapping 提供程序,因此不应(也不能)将其注册为常规数据库提供程序(要求他们提供例外中提到的静态Instance
属性/字段)。
相反,必须通过How to use it中所述的自定义DbConfiguration
或静态EntityFrameworkCache.Initialize()
方法来激活它。