使用dotConnect和Entity Framework 6创建数据库上下文时出现运行时错误

时间:2016-04-26 22:11:23

标签: .net oracle entity-framework devart dotconnect

我们正在使用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类,基本类型缺少

enter image description here

我想知道这是否与问题有关。

1 个答案:

答案 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;实体框架程序集名称更改。