ODAC 12c 和实体框架 6

Posted

技术标签:

【中文标题】ODAC 12c 和实体框架 6【英文标题】:ODAC 12c and Entity Framework 6 【发布时间】:2013-10-30 04:41:54 【问题描述】:

谁能告诉我Oracle Data Access Components 12c 是否与Entity Framework 6 兼容? Oracle 网站是文档的噩梦,找不到任何有关如何解决此问题的参考资料。

我有一个现有项目,我正在尝试升级到 ODAC 12c 和 EF6,但我遇到了以下我正在努力解决的错误:

我创建了一个新项目以排除现有项目的任何问题,但我遇到了同样的问题。我认为这是Entity Framework Power Tools Beta 4(逆向工程师代码优先)自动编辑的app.config文件的问题:

谁能指出我正确的方向?

【问题讨论】:

经过几天的研究,我认为 EF6 是在 ODAC 12c 之后发布的,因此 ODAC 12c 和 11.2 可以与 EF5 一起使用,但不能与 EF6 一起使用。所以现在我想我需要回滚到 EF5 :( ODAC 12c 第 2 版现已推出,但我看不到任何关于它是否支持 EF6 的参考:oracle.com/technetwork/topics/dotnet/utilsoft-086879.html 我也同意 Oracle 的文档是一团糟 ODP.net 12 第 2 版不支持 EF6。他们通过 twitter 给我的消息是 14 年夏天。 我也偶然发现最新的 ODAC 版本是兼容的。我试图通过向导设置一个新的 EDMX,在设置连接之前它抱怨数据提供者无法使用 EF6...ARRRRGGGHHH! 【参考方案1】:

Devart 最近宣布了Oracle 12c support。您可能需要考虑改用他们的提供商。

【讨论】:

作为付费的第 3 方产品,这是一个可行的选择。无法理解为什么 Oracle 可以为自己的产品支持获得更快的迭代。【参考方案2】:

**Oracle 数据访问组件 12c 第 3 版 Beta 2 ** ODAC 12c R3 是第一个通过 Entity Framework (EF) 6 和 EF Code First 认证的 ODP.NET 版本。 http://www.oracle.com/technetwork/topics/dotnet/whatsnew/index.html

【讨论】:

感谢您发布新版本的消息。【参考方案3】:

您收到的错误表明您没有将 Oracle.ManagedDataAccess.Client 添加到 providers 标记中。

添加这将解决您的问题:

<provider invariantName="Oracle.ManagedDataAccessClient"
                type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.1.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />

但不幸的是,由于 ODAC 12c R2 中缺乏对 EF6 的支持,最终将无法正常工作,如 cmets 中所述。

【讨论】:

【参考方案4】:

除了将 Oracle.ManagedDataAccess.Client 提供程序添加到 configuation/entityframework/providers 标记。

<entityFramework>
<providers>
  <provider invariantName="Oracle.ManagedDataAccess.Client" type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices,Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" /></providers></entityFramework>

您可能需要将以下 DbProviderFactories 标记添加到 configuration/ 因为 Oracle 安装程序忘记将其添加到 machine.config

  <system.data>
<DbProviderFactories>
  <add name="ODP.NET, Managed Driver" invariant="Oracle.ManagedDataAccess.Client" description="Oracle Data Provider for .NET, Managed Driver"
      type="Oracle.ManagedDataAccess.Client.OracleClientFactory, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342" />
</DbProviderFactories>

【讨论】:

以上是关于ODAC 12c 和实体框架 6的主要内容,如果未能解决你的问题,请参考以下文章

处理 Net 6 的可为空和实体框架实体 [关闭]

实体框架 6.0 和 oracle 11

EntityDataSource 和实体框架 6

在实体框架 6 中不起作用的实体之间的一对一关系

无法将 MySQL 连接用于实体框架 6

使用 linq 查询和实体框架进行检索