C# 实体框架4+Oracle:在本地pc上工作,但不在Windows Server 2008 R2上工作

C# 实体框架4+Oracle:在本地pc上工作,但不在Windows Server 2008 R2上工作,c#,entity-framework,oracle11g,odp.net,C#,Entity Framework,Oracle11g,Odp.net,我正在尝试使用EF4为Oracle数据库创建一个示例项目 在我的电脑里,我创建了一个项目 一些特征如果需要更多信息,请说明 VisualStudio2010 具有DB First+DbContext的实体框架4.1 任何CPU的平台目标 甲骨文BD 11g 我的数据库连接是使用服务器资源管理器->数据连接->Oracle Data Provider for.NET创建的 我有一个Oracle Home 11.2,包含client_32和client_64文件夹 我在项目中没有引用Oracle.D

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

在我的电脑里,我创建了一个项目

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

VisualStudio2010 具有DB First+DbContext的实体框架4.1 任何CPU的平台目标 甲骨文BD 11g 我的数据库连接是使用服务器资源管理器->数据连接->Oracle Data Provider for.NET创建的 我有一个Oracle Home 11.2,包含client_32和client_64文件夹 我在项目中没有引用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 AMD64的对比 列出我的电脑供应商 Odbc数据提供程序版本=4.0.0.0 OleDb数据提供程序版本=4.0.0.0 OracleClient数据提供程序版本=4.0.0.0 SqlClient数据提供程序版本=4.0.0.0 用于.NET版本的Oracle数据提供程序=4.112.4.0 Microsoft SQL Server Compact数据提供程序版本=3.5.1.0 Microsoft SQL Server Compact数据提供程序4.0版本=4.0.0.0 在我的pc上运行一个项目,使用EF生成的一个实体进行简单的添加,效果很好

服务器:

Windows Server 2008 R2标准 app64/32中的1个Oracle主页,与11.2相比 我的所有IIS应用程序池都可以运行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:找不到请求的.Net Framework数据提供程序。它可能未安装。] System.Data.Common.DBProviderFactorys.GetFactoryString 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:基础提供程序在Open->Oracle.DataAccess.Client.OracleException:ORA-12557:TNS:协议适配器不可加载时失败

搜索了错误,在某个地方我发现我应该尝试EZConnect表单用户/pass@host:端口/sid,但随后出现配置异常

到目前为止,使用oracle运行的其他应用程序我看不出它们是如何运行的,因此我必须在所有安装之前返回

我已经干了三天了,真的不知道该怎么办。服务器恢复后,有人知道我还可以尝试什么吗

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

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

在regedit中,我有:

HKEY\u LOCAL\u MACINE/SOFTWARE/ORACLE/KEY\u OraClient11g\u home1/ORACLE\u HOME->D:\app64\product\11.2.0 显然我有64位的oracle软件,所以我的下一步是将我的程序改为64位。这导致了同样的错误,之后我想我需要安装64位ODAC。我下载了ODAC11221xCOPYx64并安装了它。此时将显示Oracle Data Provider for.NET版本,但版本为4.112.2.0。现在运行我的应用程序会出现以下错误:

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

搜索错误后,我检查GAC64位。我可以在C:\Windows\Microsoft.NET\assembly\GAC\U 64\oracle.dataaccess\v4.0\U 4.112.2.0\UU 89b483f429c47342中看到oracle.dataaccess.dll

我下一步该怎么做?安装此odac并尝试更新版本的11?读到这篇文章,您似乎需要EF版本112.3.0或更高版本和.Net 4或更高版本

你猜怎么着?查南!!它奏效了:

好消息是,就我所能看到的情况来看,安装这个ODAC并没有影响到使用oracle的其余和已经运行的应用程序

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

.NET+EF+ORACLE先决条件

.Net 4或以上 至少安装了一个Oracle Home ODAC 11.2.0.3.0或以上 确保oracle和您的软件的位签名相同 如果您使用的是32位,请确保AppPool允许32位
注意:EF版本似乎并不重要

根据您需要执行的操作,您可能会发现只使用ODP.NET托管驱动程序Oracle.ManagedDataAccess.dll更容易。如果这是一个学校项目或家庭
训练,我会从那里开始。你得到的错误是非常极端的。这表明您尚未成功安装整个非托管堆栈。Hy@ChristianShay不幸的是,这是一项工作:我做了一些更新,看看是否有任何改进。是我@ChristianShay做的。感谢您的帮助: