我们正在使用DevArt dotConnect连接到Oracle后端。我们以前的开发机器都使用了dotConnect 8.4.254.4,这是检查Subversion的内容。我已经设置了一个新的dev机器并安装了最新版本,即8.5.616.0。我已经更新了我能找到的每个8.4引用,甚至在签入的所有内容中执行“查找文件”。但是,关于此版本的某些内容会破坏我们的代码。基本上,当我尝试创建数据库上下文时:
using (var _context = new DbContext())
我得到了这个例外:
实体框架提供程序类型的“实例”成员 “Devart.Data.Oracle.Entity.OracleEntityProviderServices, Devart.Data.Oracle.Entity,Version = 8.5.616.0,Culture = neutral, PublicKeyToken = 09af7300eec23701'没有返回一个对象 继承自'System.Data.Entity.Core.Common.DbProviderServices'。 实体框架提供者必须从这个类继承 'Instance'成员必须返回提供者的单例实例。 这可能是因为提供者不支持实体框架6 或以后;有关详情,请参阅http://go.microsoft.com/fwlink/?LinkId=260882 信息。
我花了很长时间搜索Stack Overflow以查找类似的错误,并且有很多(在许多数据库系统中)。有各种解决方案,如更新不同的.config文件和程序集引用,但我已经尝试了所有这些。还有一些关于将DLL移出GAC并直接在Program Files中引用它的建议,我也尝试过。我现在不知所措。如何找出此问题的原因?我很乐意添加更多有用的代码或信息,只需询问。
更新
我在对象浏览器中注意到,如果我转到实际的Devart.Data.Oracle.Entity.OracleEntityProviderServices
类,基本类型缺少:
我想知道这是否与问题有关。
答案 0 :(得分:1)
请检查您的* .config。 entityFramework部分中提供者的修订号应为6(8.5.616.6),但在DbProviderFactories(http://blog.devart.com/entity-framework-6-support-for-oracle-mysql-postgresql-sqlite-and-salesforce.html#ProviderRegistration)中必须为0(8.5.616.0):
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<entityFramework>
<providers>
<provider invariantName="Devart.Data.Oracle" type="Devart.Data.Oracle.Entity.OracleEntityProviderServices, Devart.Data.Oracle.Entity, Version=8.5.616.6, Culture=neutral, PublicKeyToken=09af7300eec23701" />
</providers>
</entityFramework>
<system.data>
<DbProviderFactories>
<remove invariant="Devart.Data.Oracle" />
<add name="dotConnect for Oracle" invariant="Devart.Data.Oracle" description="Devart dotConnect for Oracle" type="Devart.Data.Oracle.OracleProviderFactory, Devart.Data.Oracle, Version=8.5.616.0, Culture=neutral, PublicKeyToken=09af7300eec23701" />
</DbProviderFactories>
</system.data>
</configuration>
同时删除对Devart。*程序集的引用并读取它们:
C:\ Program Files(x86)\ Devart \ dotConnect \ Oracle \ Devart.Data.dll
C:\ Program Files(x86)\ Devart \ dotConnect \ Oracle \ Devart.Data.Oracle.dll
C:\ Program Files(x86)\ Devart \ dotConnect \ Oracle \ Entity \ EF6 \ Devart.Data.Oracle.Entity.dll(其修订号为6)
这有用吗?
如果您升级到v9.0,请注意命名更改:http://forums.devart.com/viewtopic.php?f=1&t=33571&gt;实体框架程序集名称更改。