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 数据库创建示例项目。
我在我的电脑上创建了一个项目。
一些特征(如果需要更多信息,请说明)
- Visual Studio 2010
- Entity Framework 4.1 优先使用 DB + DbContext
- 平台目标"Any CPU"
- 甲骨文 BD 11g
- 我的数据库连接是使用 "Server Explorer" -> "Data Connections" -> "Oracle Data Provider for .NET"
创建的
- 我有一个带有 client_32 和 client_64 文件夹的 Oracle Home 11.2
- 我在我的项目中没有引用 Oracle.DataAccess.Client
- 在我的 GAC 中,我发现 Oracle.DataAccess vs 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 版本的 Oracle 数据提供程序=4.112.4.0
- Microsoft SQL 服务器紧凑型数据提供程序版本=3.5.1.0
- Microsoft SQL Server Compact Data Provider 4.0 版本=4.0.0.0
运行 我的电脑中的项目(使用 EF 生成的实体之一进行简单添加)工作正常。
服务器:
- Windows 服务器 2008 R2 标准版
- 1 Oracle 主页 app64/32,对比 11.2
- 我所有的 IIS AppPools 都可以 运行 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.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 ================== ==============
在我的服务器恢复到之前的状态后,我注意到我忘记检查的东西
在注册表编辑器中我有:
- HKEY_LOCAL_MACINE/SOFTWARE/ORACLE/KEY_OraClient11g_home1/ORACLE_HOME -> D:\app64\product.2.0
显然我有 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 版本似乎并不重要
我正在尝试使用 EF4 为 Oracle 数据库创建示例项目。
我在我的电脑上创建了一个项目。
一些特征(如果需要更多信息,请说明)
- Visual Studio 2010
- Entity Framework 4.1 优先使用 DB + DbContext
- 平台目标"Any CPU"
- 甲骨文 BD 11g
- 我的数据库连接是使用 "Server Explorer" -> "Data Connections" -> "Oracle Data Provider for .NET" 创建的
- 我有一个带有 client_32 和 client_64 文件夹的 Oracle Home 11.2
- 我在我的项目中没有引用 Oracle.DataAccess.Client
- 在我的 GAC 中,我发现 Oracle.DataAccess vs 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 版本的 Oracle 数据提供程序=4.112.4.0
- Microsoft SQL 服务器紧凑型数据提供程序版本=3.5.1.0
- Microsoft SQL Server Compact Data Provider 4.0 版本=4.0.0.0
运行 我的电脑中的项目(使用 EF 生成的实体之一进行简单添加)工作正常。
服务器:
- Windows 服务器 2008 R2 标准版
- 1 Oracle 主页 app64/32,对比 11.2
- 我所有的 IIS AppPools 都可以 运行 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.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 ================== ==============
在我的服务器恢复到之前的状态后,我注意到我忘记检查的东西
在注册表编辑器中我有:
- HKEY_LOCAL_MACINE/SOFTWARE/ORACLE/KEY_OraClient11g_home1/ORACLE_HOME -> D:\app64\product.2.0
显然我有 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 版本似乎并不重要