私たちのシステムでは、nhibernate と Oracle を使用しています。Oracle.DataAccess.dll と、クライアントのサーバーにインストールされている Oracle クライアントとの関係が混乱しているため、常に多くの展開の問題が発生します。
インストールされているOracleクライアントを変更できる場合とできない場合があります。32 ビット版の dll が必要な場合もあれば、64 ビット版が必要な場合もあります。より使いやすいデータベースに oracle を変更できればと思いますが、今のところそれはオプションではありません。
この混乱をすべて取り除く 1 つの方法は、DbProviderFactories を使用することです。そのため、プロジェクトで Oracle.DataAccess.dll を参照せず、サーバーにインストールされているバージョンを使用できます。
DbProviderFactory を使用するように nhibernate を構成するにはどうすればよいですか?
私の構成:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="dialect">NHibernate.Dialect.Oracle9iDialect</property>
<property name="connection.driver_class">NHibernate.Driver.OracleDataClientDriver</property>
<property name="connection.connection_string">Data Source=XE; User Id=*****; Password=******;</property>
<property name="current_session_context_class">NHibernate.Context.ManagedWebSessionContext, NHibernate</property>
<property name="sql_exception_converter">Way2Pim.Data.NHibernate.SqlExceptions.SqlExceptionConverter, Way2Pim.Data</property>
<property name="show_sql">true</property>
<property name="hbm2ddl.keywords">none</property>
<mapping assembly="MyAssembly" />
</session-factory>
</hibernate-configuration>