【发布时间】:2017-01-01 19:24:06
【问题描述】:
由于作者请求帮助请求转到 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”。 实体框架提供者必须从这个类和 'Instance' 成员必须返回提供者的单例实例。 这可能是因为提供者不支持 Entity Framework 6 或以后;见http://go.microsoft.com/fwlink/?LinkId=260882了解更多 信息。
这是我的 web.config 的相关 sn-p(被要求更改 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>
【问题讨论】:
-
提供者是否支持 Entity Framework 6 或更高版本?我假设是您正在使用的 EF 版本
-
它说明了它首先只支持代码。
-
在此处查看 codeplex 文档jetentityframeworkprovider.codeplex.com/documentation
-
这是我正在使用的现有应用程序,所以它完全是代码优先的 :-) 我也在寻找源代码,JetProviderServices.cs 确实是 DbProviderServices 的子类(我显然已经检查了文档。它建议这些堆栈溢出标记以引起作者的注意)
-
但是您提到旧的数据库已经存在?这表示 db-first。
标签: c# entity-framework jet-ef-provider