web-dev-qa-db-ja.com

C#NHibernateおよびOracleマネージドクライアント

私は別の16のプロジェクト(テスト、コア、電子メールなどのようなWebとアプリ)を隠す大きなプロジェクトを持っています。メインのWebサイトプロジェクトにC#MVC4を使用しています。管理対象外のクライアントを使用する場合は、プロジェクトフォルダ/ binに記録されたライブラリOracle.DataAccess.dllを実行する必要があり、すべてが正常に機能します(設定する必要があります(変更)Web.config-> param:

<connectionStrings>
   <add name="PC13" connectionString="User Id=TEST; Password=TEST; Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=DBTEST)(PORT=1521))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME = DBTEST)));" />   
</connectionStrings>

また、DB接続はORA例外TNS_NAMEなしで正常に機能します)。 TESTのようなエイリアスのみを使用する場合、データソースをtnsnames.oraでフルパスに設定する必要があります。「例外:ORA-12154:TNS:指定された接続識別子を解決できませんでした」というメッセージが表示されますが、エイリアスにフルtnsコードを設定すると->すべてうまくいきます。

hibernate.cfg.xmlファイルを使用します:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
   <session-factory>
      <property name="connection.driver_class">NHibernate.Driver.OracleDataClientDriver</property>
      <property name="show_sql">true</property>
      <property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
      <property name="command_timeout">60</property>
      <property name="cache.provider_class">NHibernate.Caches.SysCache2.SysCacheProvider, NHibernate.Caches.SysCache2</property>
      <property name="cache.use_second_level_cache">true</property>
      <property name="cache.use_query_cache">true</property>
      <property name="cache.default_expiration">120</property>
   </session-factory>  

私のWeb.configファイル(管理対象クライアントの場合はOracle.manageddataaccess.client部分を追加):

<connectionStrings>
   <add name="PC13" connectionString="User Id=TEST; Password=TEST; Data Source=DBTEST;" />   
</connectionStrings>

<Oracle.manageddataaccess.client>
    <version number="*">
      <dataSources>
        <dataSource alias="DBTEST" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=DBTEST)(PORT=1521))(CONNECT_DATA=(SERVER = DEDICATED)(SERVICE_NAME = DBTEST)))"/>
      </dataSources>
    </version>
</Oracle.manageddataaccess.client>

私は専用のDBサーバーを持っており、Visual Studio 2010 SP1 32ビット(Win 7 64b)でプログラミングしています。 Oracleクライアント11g(32および64bバージョン)をインストールしました。ファイルhibernate.cfg.xmlは、「IntegrationTest」、「Core」などのパッケージ内の別の3つのプロジェクトで使用されます。デバッグモードとx86プラットフォームでプログラム(F5)を実行します。

私が使用するプロジェクトでは:

  • NHibernatev。3.3.1.4000
  • StructureMapv。2.6.4。
  • およびその他の重要でないパッケージ

パッケージをインストールするために必要なものとその設定方法を教えてください。 Nugetで参照を追加してみます

  • 公式OracleODP.NET、マネージドドライバー12.1.22
  • Oracle Data Provider for .NET(ODP ... 121.1.2

これらのパッケージのいくつかを(Nugetからの参照を追加して)Webサイトプロジェクトにインストールし、hibernate.cfg.xmlを次のように変更すると:

<property name="connection.driver_class">NHibernate.Driver.OracleManagedDriver</property>

VS Exception「NHibernate.Driver.OracleManagedDriverからドライバーを作成できませんでした」からメッセージが表示されました


View-> Server Exploler-> toData Cennectionそして私は接続の追加を設定します。 。 。(リンク-> .NETマニュアルへの簡単なドライブを参照)。 ODP.NETマネージオプションが表示されず、Oracleオプションの.NET Frameworkデータプロバイダーのみが表示されます。接続しようとすると、「BadImageFormatException。これは、32ビットのOracleクライアントコンポーネントがインストールされた64ビットモードで実行すると発生します」というメッセージが表示されます。

私の質問は

  1. 参考(ドライバー)には何が使えますか?
  2. どうすれば設定できますか?

。NETマニュアルへの簡単なドライブ

どうもありがとう

8
Jan Sršeň

NHibernate 4.0.4を使用しており、「Oracle.ManagedDataAccess」nugetパッケージをインストールしました( https://www.nuget.org/packages/Oracle.ManagedDataAccess/ )。

Oracle Managed Driverを使用するようにNHibernateを構成するには、hibernate.cfg.xmlファイルを少し変更し、NHibernate.Driver.OracleManagedDataClientDriverを「connection.driver_class」として使用する必要があります。

したがって、私のxml設定ファイルは次のとおりです。

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.driver_class">NHibernate.Driver.OracleManagedDataClientDriver</property>
    <property name="connection.connection_string">User Id=user;Password=pws;Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=10.10.10.18)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=SRV)))</property>
    <property name="show_sql">true</property>
    <property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
    <property name="query.substitutions">true 1, false 0, yes 'Y', no 'N'</property>
  </session-factory>
</hibernate-configuration>

幸運を祈ります-OracleとORMを使用することは非常に厄介な経験になる可能性があることを私は知っていますが、最終的には努力する価値があります。

12
rshimoda