1

Entity Framework を使用して Oracle データベースにアクセスする新しいアプリケーションを開発しました。これは、最新バージョンの ODP.NET を使用して、ローカルで期待どおりに機能しています。現在、他の多くのレガシー アプリケーションを実行している運用サーバーにこのアプリケーションをデプロイしようとしています。理想的には、新しいアプリケーションで独自の ODP.NET / Oracle dll を使用し、製品サーバー上の既存の Oracle インストールを変更する必要がないようにしたいと考えています。

私はこのガイドに従いました:

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)
4

2 に答える 2

2

追加のクライアントをインストールすることで問題を解決したように見えますが、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 フォルダーにドロップしました。

于 2013-01-23T13:44:09.273 に答える
1

ここで自分の質問に答えます。最終的に、新しいバージョンを client_2 フォルダーに配置するデフォルト設定を使用して、2 番目のバージョンの Oracle をインストールしました。

  • 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 ではなく client から) そのアプリケーションの bin フォルダーにドロップする必要がありました。

于 2013-01-22T15:35:23.620 に答える