Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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
C# JetentyFramework vs EF 6?_C#_Entity Framework_Jet Ef Provider - Fatal编程技术网

C# JetentyFramework vs EF 6?

C# JetentyFramework vs EF 6?,c#,entity-framework,jet-ef-provider,C#,Entity Framework,Jet Ef Provider,在这里抛出这个,因为作者请求帮助请求转到StackOverflow 正在开发一个现有应用程序,该应用程序最初已写入SQL Server。不幸的是,现在有一个非常旧的Access数据库,我必须与之交谈。试图用JetEntityFramework来帮助我,这样我就不需要进行大规模的替换。走出大门,我抛出了这个例外。我怀疑web.config有问题,因为正确设置它的文档很少 错误 System.InvalidOperationException未由用户代码处理 HResult=-2146233079

在这里抛出这个,因为作者请求帮助请求转到StackOverflow

正在开发一个现有应用程序,该应用程序最初已写入SQL Server。不幸的是,现在有一个非常旧的Access数据库,我必须与之交谈。试图用JetEntityFramework来帮助我,这样我就不需要进行大规模的替换。走出大门,我抛出了这个例外。我怀疑web.config有问题,因为正确设置它的文档很少

错误

System.InvalidOperationException未由用户代码处理
HResult=-2146233079 Message=实体的“实例”成员 框架提供程序类型 'JetEntityFrameworkProvider.JetProviderFactory, JetEntityFrameworkProvider,版本=1.2.4.0,区域性=中性, PublicKeyToken=756cf6beb8fe7b41'未返回 继承自“System.Data.Entity.Core.Common.DbProviderServices”。 实体框架提供程序必须继承自此类和 “实例”成员必须返回提供程序的单例实例。 这可能是因为提供程序不支持实体框架6 或以后;查看更多信息 信息

下面是my web.config的相关片段(被要求更改DBContext和MDB文件的实际名称)


在您的示例中,提供程序使用
JetEntityFrameworkProvider.JetProviderFactory
作为其类型。这导致了上述异常,因为它不是从
System.Data.Entity.Core.Common.DbProviderServices
继承的。来自视频教程和查看源代码JetEntityFrameworkProvider。JetProviderServices是提供程序所需的类型

根据项目站点的教程,检查以下作为示例显示的配置

  <connectionStrings>
    <add name="MyDBContext" 
         connectionString="Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\MyAccessDB.MDB" 
         providerName="JetEntityFrameworkProvider" />
  </connectionStrings>
 <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider 
        invariantName="JetEntityFrameworkProvider" 
        type="JetEntityFrameworkProvider.JetProviderServices, JetEntityFrameworkProvider"/>
    </providers>
  </entityFramework>
  <system.data>
    <DBProviderFactories>
      <remove invariant="JetEntityFrameworkProvider"/>
      <add 
        invariant="JetEntityFrameworkProvider"
        name="Jet Entity Framework Provider"
        description="Jet Entity Framework Provider"
        type="JetEntityFrameworkProvider.JetProviderFactory, JetEntityFrameworkProvider"/>
    </DBProviderFactories>
  </system.data>


提供商是否支持Entity Framework 6或更高版本?我假设您使用的是EF的版本,这说明它只支持代码优先。检查codeplex文档,这里是我正在使用的现有应用程序,所以它完全是代码优先:-)我还查看了那里的源代码和JetProviderServices.cs索引子类DbProviderServices(我显然已经查阅了文档。它建议在这里使用这些堆栈溢出标记以引起作者的注意)但是你提到旧的db已经存在?这表明db-first。是的,我同时按照我上面提到的方式找到了它。过一会儿要问下一个错误。哈哈
  <connectionStrings>
    <add name="MyDBContext" 
         connectionString="Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\MyAccessDB.MDB" 
         providerName="JetEntityFrameworkProvider" />
  </connectionStrings>
 <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
    <providers>
      <provider 
        invariantName="JetEntityFrameworkProvider" 
        type="JetEntityFrameworkProvider.JetProviderServices, JetEntityFrameworkProvider"/>
    </providers>
  </entityFramework>
  <system.data>
    <DBProviderFactories>
      <remove invariant="JetEntityFrameworkProvider"/>
      <add 
        invariant="JetEntityFrameworkProvider"
        name="Jet Entity Framework Provider"
        description="Jet Entity Framework Provider"
        type="JetEntityFrameworkProvider.JetProviderFactory, JetEntityFrameworkProvider"/>
    </DBProviderFactories>
  </system.data>