EF4创建自定义DbFactoryProvider和其他Db*类

She*_*byZ 3 ado.net entity-framework

我试图创建一组自定义类来创建我自己的实体框架与之通信的提供程序.我创建了自定义类,它继承自抽象类DbProviderFactory,刚刚开始测试,看看我是否可以让它与EF交谈,但我遇到了问题.

<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=&quot;data source=.;
     initial catalog=AdventureWorks;integrated security=True;
     multipleactiveresultsets=True;App=EntityFramework&quot;"
     providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

使用上面定义的CustomClient,我认为它将顺利进入Entity goodness,但是当我的代码尝试创建一个新的AdventureWorksEntities对象时,我得到以下异常:

InvalidOperationException 请求的.Net Framework数据提供程序的实现没有System.Data.Common.DbProviderFactory派生类型的Instance字段.

查看DbProviderFactory的可用替代没有提及实例成员.我不确定为什么它需要这个字段,如果它不是DbProviderFactory的类/接口的一部分.修复是否像提供名为Instance的字段一样简单,该字段返回我的自定义类型的对象?

Lad*_*nka 6

将此添加到您的自定义提供商:

public static readonly CustomProviderFactory Instance = new CustomProviderFactory();
Run Code Online (Sandbox Code Playgroud)

所有在工厂建造都有这个 - 他们被用作单身人士.