Entity Framework 4 + Oracle:在本地 pc 上工作,但不在 Windows Server 2008 R2 上工作

Entity Framework 4 + Oracle: Working in local pc but not on Windows Server 2008 R2

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

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

一些特征(如果需要更多信息,请说明)

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

服务器:

当 运行 在服务器上运行程序时,出现以下错误:“[ArgumentException: 无法找到请求的 .Net Framework 数据提供程序。它可能未安装。] 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:protocol 适配器不可加载。

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

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

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

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

在我的服务器恢复到之前的状态后,我注意到我忘记检查的东西

在注册表编辑器中我有:

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

system.data。供应商不兼容异常:商店供应商工厂类型 '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 并没有影响(据我所知)剩余的和已经 运行ning 使用 oracle 的应用程序。

注意:我使用命令 install.bat all D:\app64\produc 安装了 ODAC t.2.0 甲骨文 - OraClient11g_home1

简历中:

.NET + EF + ORACLE 先决条件

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

注意:EF 版本似乎并不重要