Entity framework EF4创建自定义DbFactoryProvider和其他Db*类
我试图创建一组自定义类来创建自己的提供者,实体框架将与之通信。我已经创建了从抽象类DbProviderFactory继承的自定义类,并且刚刚开始测试,看看是否可以让它与EF通信,但是我遇到了问题Entity framework EF4创建自定义DbFactoryProvider和其他Db*类,entity-framework,ado.net,Entity Framework,Ado.net,我试图创建一组自定义类来创建自己的提供者,实体框架将与之通信。我已经创建了从抽象类DbProviderFactory继承的自定义类,并且刚刚开始测试,看看是否可以让它与EF通信,但是我遇到了问题 <configuration> <system.data> <DbProviderFactories> <add name="Custom Data Provider" invariant="CustomClient
<configuration>
<system.data>
<DbProviderFactories>
<add name="Custom Data Provider"
invariant="CustomClient"
description=".Net Framework Data Provider for Custom"
type="CustomClient.CustomProviderFactory, CustomClient,
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</DbProviderFactories>
</system.data>
<connectionStrings>
<add name="AdventureWorksEntities"
connectionString="metadata=...;
provider=CustomClient;
provider connection string="data source=.;
initial catalog=AdventureWorks;integrated security=True;
multipleactiveresultsets=True;App=EntityFramework""
providerName="System.Data.EntityClient" />
</connectionStrings>
</configuration>
使用上面定义的CustomClient,我认为可以顺利进入实体优化,但当我的代码尝试创建新的AdventureWorksEntities对象时,我遇到以下异常:
无效操作例外
请求的.Net Framework数据提供程序的实现没有System.Data.Common.DbProviderFactory派生类型的实例字段
查看DbProviderFactory的可用覆盖时,没有提到实例成员。如果这个字段不是DbProviderFactory的类/接口的一部分,我不确定为什么需要这个字段。修复是否像提供一个名为Instance的字段那样简单,该字段返回一个自定义类型的对象?将其添加到自定义提供程序:
public static readonly CustomProviderFactory Instance = new CustomProviderFactory();
所有内置工厂都有这样的功能—它们作为单例使用。为什么不在抽象类中将其作为必须有实现的字段强制执行?这是API作者的问题。没有静态抽象字段(抽象不能是静态的)。但是,是的,这是一个糟糕的设计。重要提示:您需要一个
公共静态
实例字段,而不是属性