【问题标题】:Entity Framework 4 + Oracle: Working in local pc but not on Windows Server 2008 R2Entity Framework 4 + Oracle:在本地电脑上工作,但不在 Windows Server 2008 R2 上
【发布时间】:2015-12-27 22:01:22
【问题描述】:

我正在尝试使用 EF4 为 Oracle 数据库创建示例项目。

在我的电脑上我创建了一个项目。

一些特性(如果需要更多信息,请说出来)

  • Visual Studio 2010
  • 带有 DB First + DbContext 的实体框架 4.1
  • 平台目标“任何 CPU”
  • Oracle BD 11g
  • 我的数据库连接是使用“服务器资源管理器”->“数据连接”->“Oracle Data Provider for .NET”创建的
  • 我有一个带有 client_32 和 client_64 文件夹的 Oracle Home 11.2
  • 我没有在我的项目中引用 Oracle.DataAccess.Client
  • 在我的 GAC 中,我发现 Oracle.DataAccess 与 2.112.3.0 x86、2.112.1.0 x86、2.112.4.0 AMD64、2.112.3.0 AMD64、2.112.1.0 AMD 64
  • 列出我得到的电脑供应商
    • Odbc 数据提供程序版本=4.0.0.0
    • OleDb 数据提供程序版本=4.0.0.0
    • OracleClient 数据提供程序版本=4.0.0.0
    • SqlClient 数据提供程序版本=4.0.0.0
    • .NET 版本 = 4.112.4.0 的 Oracle 数据提供程序
    • Microsoft SQL Server Compact 数据提供程序版本=3.5.1.0
    • Microsoft SQL Server Compact 数据提供程序 4.0 版本=4.0.0.0

在我的电脑上运行项目(使用 EF 生成的实体之一进行简单的添加),工作正常。

服务器:

  • Windows Server 2008 R2 标准版
  • app64/32 中的 1 个 Oracle 主目录,与 11.2 相比
  • 我所有的 IIS AppPool 都可以运行 32 位
  • 在 GAC 中,我有 Oracle.DataAccess 2.112.1.0 x86 和 AMD64
  • 列出我可以看到的供应商
    • Odbc 数据提供程序版本=4.0.0.0
    • OleDb 数据提供程序版本=4.0.0.0
    • OracleClient 数据提供程序版本=4.0.0.0
    • SqlClient 数据提供程序版本=4.0.0.0

在服务器上运行程序时,我收到以下错误:“[ArgumentException: Unable to find the requested .Net Framework Data Provider. It may not be installed.] System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName)"

查看提供程序后,我意识到服务器中缺少提供程序“Oracle Data Provider for .NET”,因此我尝试了多个 oracle 安装(ODAC、ODP、XCopy),但似乎没有任何效果,尽管安装了几个文件(我使用了现有的 oracle home),提供程序一直没有显示,在注册表中,在 SOFTWARE\ORACLE\ODP.NET 下我一直只看到 2.112.1.0 版本。

在此之后,我尝试使用 oracle DLL 部署我的 exe,甚至将 app.config 更改为包含

<system.data>
<DbProviderFactories>
  <remove invariant="Oracle.DataAccess.Client" />
  <add name="Oracle Data Provider for .NET" invariant="Oracle.DataAccess.Client" description="Oracle Data Provider for .NET"
       type="Oracle.DataAccess.Client.OracleClientFactory, Oracle.DataAccess, Version=4.112.3.0, Culture=neutral, 
       PublicKeyToken=89b483f429c47342"/>
</DbProviderFactories>

但我收到以下错误:System.Data.EntityException:底层提供程序在打开时失败 -> Oracle.DataAccess.Client.OracleException:ORA-12557:TNS:协议适配器不可加载。

搜索错误并在某处发现我应该尝试 EZConnect 表单 (user/pass@host:port/sid) 但随后出现配置异常...

截至目前,使用 oracle 运行的其他应用程序(我看不到它们是如何运行的)停止工作,所以我必须在所有安装之前返回...

我已经在这里呆了 3 天了,我真的不知道该怎么办。服务器恢复后,有人知道我还能尝试什么吗?

========================= 更新1 ==================== =============

在我的服务器恢复到这一切之前,我发现了一些我忘记检查的东西

在注册表中我有:

  • HKEY_LOCAL_MACINE/SOFTWARE/ORACLE/KEY_OraClient11g_home1/ORACLE_HOME -> D:\app64\product\11.2.0

显然,我的 oracle 东西是 64 位的,所以我的下一步是将我的程序更改为 64 位。这导致了同样的错误,之后我认为我需要安装 64 位 ODAC。我下载了 ODAC112021Xcopy_x64 并安装了它。随之出现 .NET 版本的 Oracle 数据提供程序(但版本为 4.112.2.0)。现在运行我的应用程序会出现以下错误:

系统数据。提供者不兼容异常:商店提供者工厂类型“Oracle.DataAccess.Client.OracleClientFactory”未实现 IServiceProvider 接口

搜索错误后,我检查了 GAC64 位。我可以在 C:\Windows\Microsoft.NET\assembly\GAC_64\Oracle.DataAccess\v4.0_4.112.2.0__89b483f429c47342 中看到 oracle.dataaccess.dll。

我的下一步应该是什么?卸载此 odac 并尝试更新版本的 11?阅读这篇文章 (http://netdevelopmentmanfreddahmen.blogspot.pt/2013/07/c-error-store-provider-factory-type.html),对于 EF,您似乎需要 112.3.0 或更高版本以及 .Net 4 或更高版本

你猜怎么着?灿南!!成功了:)

好消息是,安装此 ODAC 并没有影响(据我所知)剩余的和已经使用 oracle 运行的应用程序。

注意:我使用命令 install.bat all D:\app64\produc 安装了 ODAC t\11.2.0 Oracle - OraClient11g_home1

【问题讨论】:

  • 根据您的需要,您可能会发现仅使用 ODP.NET 托管驱动程序 (Oracle.ManagedDataAccess.dll) 会更容易。如果这是一个学校项目或家庭培训,我会从那里开始。您得到的 ORA 错误非常极端。这表明您没有成功安装整个非托管堆栈。
  • Hy @ChristianShay 不幸的是这是工作 :( 我做了一些更新,看看是否能让任何事情更清楚
  • 嗨@ChristianShay 成功了。谢谢你的帮助:)

标签: c# entity-framework oracle11g odp.net


【解决方案1】:

在简历中:

.NET + EF + ORACLE 先决条件

  • .Net 4 或以上
  • 至少安装了一个 Oracle Home
  • ODAC 11.2.0.3.0 或以上
  • 确保 oracle 和您的软件的位签名相同
  • 如果您使用的是 32 位,请确保 appPools 允许 32 位

注意:EF 版本似乎无关紧要

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    • 2014-05-16
    • 2018-06-20
    • 1970-01-01
    • 1970-01-01
    • 2016-11-17
    相关资源
    最近更新 更多