【问题标题】:Runtime error while creating database context using dotConnect and Entity Framework 6使用 dotConnect 和 Entity Framework 6 创建数据库上下文时出现运行时错误
【发布时间】:2016-04-26 22:11:23
【问题描述】:

我们正在使用 DevArt dotConnect 连接到 Oracle 后端。我们以前的开发机器都使用了 dotConnect 8.4.254.4,这是在 Subversion 中签入的。我已经设置了一台新的开发机器并安装了最新版本,即 8.5.616.0。我已经更新了我能找到的每一个 8.4 参考,甚至对所有签入的内容都进行了“在文件中查找”。但是,关于这个版本的某些内容破坏了我们的代码。基本上,当我尝试创建数据库上下文时:

using (var _context = new DbContext())

我得到了这个例外:

实体框架提供程序类型的“实例”成员 'Devart.Data.Oracle.Entity.OracleEntityProviderServices, Devart.Data.Oracle.Entity,版本=8.5.616.0,文化=中性, PublicKeyToken=09af7300eec23701' 没有返回一个对象 继承自“System.Data.Entity.Core.Common.DbProviderServices”。 实体框架提供者必须从这个类和 'Instance' 成员必须返回提供者的单例实例。 这可能是因为提供者不支持 Entity Framework 6 或以后;更多信息见http://go.microsoft.com/fwlink/?LinkId=260882 信息。

我花了很长时间在 Stack Overflow 上搜索类似的错误,并且有很多错误(在许多数据库系统中也是如此)。有各种解决方案,例如更新不同的 .config 文件和程序集引用,但我已经尝试了所有这些。还有一些关于将 DLL 从 GAC 中移出并直接在 Program Files 中引用它的建议,我也尝试过。我现在不知所措。如何追踪此问题的原因?我很乐意添加更多有用的代码或信息,请尽管询问。

更新:

我在对象浏览器中注意到,如果我转到实际的 Devart.Data.Oracle.Entity.OracleEntityProviderServices 类,则基本类型是 missing:

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

【问题讨论】:

    标签: .net oracle entity-framework devart dotconnect


    【解决方案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 > 实体框架程序集名称更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多