【问题标题】:Deploying Oracle Instant Client alongside existing Oracle installations与现有 Oracle 安装一起部署 Oracle Instant Client
【发布时间】:2012-12-14 17:44:11
【问题描述】:

我开发了一个使用实体框架访问 Oracle 数据库的新应用程序。这使用最新版本的 ODP.NET 在本地按预期工作。我现在正尝试将此应用程序部署在运行许多其他遗留应用程序的生产服务器上。理想情况下,我希望我的新应用程序能够使用它自己的 ODP.NET / Oracle dll,而不必更改产品服务器上现有的 Oracle 安装。

我遵循了这个指南:

http://jeremybranham.wordpress.com/2011/04/25/oracle-instant-client-with-odp-net/

这似乎在 cmets 的基础上取得了一些成功。

但是,我在尝试创建实体对象时遇到以下异常:

外部异常

Exception has been thrown by the target of an invocation.

内部异常

The type initializer for 'Oracle.DataAccess.Client.OracleClientFactory' threw an exception.
at System.RuntimeFieldHandle.GetValue(RtFieldInfo field, Object instance, RuntimeType fieldType, RuntimeType declaringType, Boolean& domainInitialized)
at System.Reflection.RtFieldInfo.InternalGetValue(Object obj, Boolean doVisibilityCheck, Boolean doCheckConsistency)
at System.Reflection.RtFieldInfo.GetValue(Object obj)
at System.Data.Common.DbProviderFactories.GetFactory(DataRow providerRow)
at System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName)
at System.Data.EntityClient.EntityConnection.GetFactory(String providerString)
at System.Data.EntityClient.EntityConnection.ChangeConnectionString(String newConnectionString)
at System.Data.EntityClient.EntityConnection..ctor(String connectionString)
at System.Data.Objects.ObjectContext.CreateEntityConnection(String connectionString)
at System.Data.Objects.ObjectContext..ctor(String connectionString, String defaultContainerName)
at MyAppMVC.Models.DataModels.STSProcedureEntities..ctor()
at MyAppMVC.Services.MyService.GetPersons(String lastName)

【问题讨论】:

    标签: c# asp.net-mvc oracle odp.net


    【解决方案1】:

    虽然您似乎通过安装额外的客户端解决了您的问题,但您可能已经在 app/web.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=2.112.3.0, Culture=neutral, 
               PublicKeyToken=89b483f429c47342"/>
        </DbProviderFactories>
      </system.data>
    

    并将二进制文件放入本地 bin 文件夹中。

    【讨论】:

      【解决方案2】:

      在这里回答我自己的问题。我们最终安装了 Oracle 的第二个版本,使用将新版本放入 client_2 文件夹的默认设置。

      • D:\oracle\product\11.2.0\client(旧版本)
      • D:\oracle\product\11.2.0\client_2(新版本)

      唯一的附加安装步骤是将之前的 TNSNAMES.ORA 文件放入新的 client_2 中。该文件位于 client\network\admin 中,使用上面的文件路径。

      因为我们所有的应用程序都设置为专门寻找其正确的 Oracle 版本 (SpecificVersion=true),所以大多数情况下都可以在没有修改的情况下运行。对于那些没有的,我们必须将旧版本的 Oracle.DataAccess.dll(来自客户端,而不是 client_2)放入该应用程序的 bin 文件夹中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-29
        • 2016-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多