c# - JetEntityFramework 与 EF 6?

标签 c# entity-framework jet-ef-provider

因为作者要求帮助请求去 StackOverflow,所以把它扔在这里。

有一个正在进行中的现有应用程序,最初写入 SQL Server。遗憾的是,现在有一个非常古老的 Access 数据库,我必须与之交谈。尝试使用 JetEntityFramework 来帮助我,这样我就不需要进行批量替换。出了门,我抛出了这个异常。我怀疑 web.config 有问题,因为正确设置它的文档很少。

错误

System.InvalidOperationException was unhandled by user code
HResult=-2146233079 Message=The 'Instance' member of the Entity Framework provider type 'JetEntityFrameworkProvider.JetProviderFactory, JetEntityFrameworkProvider, Version=1.2.4.0, Culture=neutral, PublicKeyToken=756cf6beb8fe7b41' did not return an object that inherits from 'System.Data.Entity.Core.Common.DbProviderServices'. Entity Framework providers must inherit from this class and the 'Instance' member must return the singleton instance of the provider. This may be because the provider does not support Entity Framework 6 or later; see http://go.microsoft.com/fwlink/?LinkId=260882 for more information.

这是我的 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>

最佳答案

在您的示例中,提供程序使用 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>

关于c# - JetEntityFramework 与 EF 6?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41418283/

相关文章:

c# - 您应该在 Windows 8 应用程序的哪个位置编码 'privacy policy' ?

c# - 常量不能标记为静态

c# - 用户控制点击事件

c# - 为什么 EF Core 2.2 将默认主键设置为 nvarchar(450)

c# - EF Code First 中的静态构造函数的使用

asp.net - 使用 Jet 引擎使用 Entity Framework (代码优先)重命名列(并保留数据)

c# - 我应该如何命名数据库包装器对象?

c# - 如何避免对类名和属性名使用相同的标识符?

c# - Entity Framework 核心和 MS Access