Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework EF4创建自定义DbFactoryProvider和其他Db*类_Entity Framework_Ado.net - Fatal编程技术网

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

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

我试图创建一组自定义类来创建自己的提供者,实体框架将与之通信。我已经创建了从抽象类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>

使用上面定义的CustomClient,我认为可以顺利进入实体优化,但当我的代码尝试创建新的AdventureWorksEntities对象时,我遇到以下异常:

无效操作例外 请求的.Net Framework数据提供程序的实现没有System.Data.Common.DbProviderFactory派生类型的实例字段


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

将其添加到自定义提供程序:

public static readonly CustomProviderFactory Instance = new CustomProviderFactory();

所有内置工厂都有这样的功能—它们作为单例使用。

为什么不在抽象类中将其作为必须有实现的字段强制执行?这是API作者的问题。没有静态抽象字段(抽象不能是静态的)。但是,是的,这是一个糟糕的设计。重要提示:您需要一个
公共静态
实例字段,而不是属性