2012-12-14 61 views
1

我開發了一個使用實體框架訪問Oracle數據庫的新應用程序。這是本地預期的工作,使用最新版本的ODP.NET。我現在試圖在運行許多其他遺留應用程序的生產服務器上部署此應用程序。理想情況下,我希望我的新應用程序能夠使用自己的ODP.NET/Oracle dll,而不必在prod服務器上更改現有的Oracle安裝。與現有Oracle安裝一起部署Oracle Instant Client

我遵循這個指南:

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

這似乎已經基於該意見取得了一些成功。

不過,我試圖創建實體時,遇到下列異常對象:

外層的異常

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) 

回答

0

這裏回答我的問題。我們最終安裝了第二版Oracle,使用將新版本放入client_2文件夾的默認設置。

  • d:\ ORACLE \產品\ 11.2.0 \客戶(老版)
  • d:\ ORACLE \產品\ 11.2.0 \ client_2的(新版本)

的唯一附加安裝步驟在之前的TNSNAMES.ORA文件中放入新的client_2。該文件位於client \ network \ admin中,使用上面的文件路徑。

因爲我們所有的應用程序都被設置爲專門查找他們正確的Oracle版本(SpecificVersion = true),所以大多數情況下都可以不加修改地工作。對於那些不需要將舊版本的Oracle.DataAccess.dll(來自客戶端,而不是client_2)放入該應用程序的bin文件夾的用戶。

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文件夾中。

相關問題