因为作者要求寻求帮助的请求提交到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' 继承的对象。 实体框架提供程序必须从此类继承,并且 'Instance' 成员必须返回提供程序的单例实例。 这可能是因为该提供程序不支持实体框架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>
JetEntityFrameworkProvider.JetConnection
更改为JetEntityFrameworkProvider
,看看是否有所不同。您应该查看视频,因为我还注意到配置方面存在一些差异,与您的示例不同。 - Nkosi