JetEntityFramework与EF 6?

Joe*_*eHz 5 c# entity-framework jet-ef-provider

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

有一个正在进行的现有应用程序,最初写入SQL Server.可悲的是,现在有一个非常古老的Access数据库,我必须与之交谈.尝试使用JetEntityFramework帮助我,所以我不需要进行批发替换.走出大门,我抛出这个例外.我怀疑web.config有问题,因为正确设置它的文档很少.

错误

System.InvalidOperationException未由用户代码处理
HResult = -2146233079 Message =实体框架提供程序类型'JetEntityFrameworkProvider.JetProviderFactory,JetEntityFrameworkProvider,Version = 1.2.4.0,Culture = neutral,PublicKeyToken = 756cf6beb8fe7b41'的'Instance'成员未返回继承自'System.Data.Entity.Core.Common.DbProviderServices'的对象.实体框架提供程序必须从此类继承,并且"实例"成员必须返回提供程序的单例实例.这可能是因为提供者不支持实体框架6或更高版本; 有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=260882.

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

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

Nko*_*osi 4

在您的示例中,提供程序使用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>
Run Code Online (Sandbox Code Playgroud)