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