web-dev-qa-db-ja.com

NHibernate.Driver.OracleDataClientDriverからドライバーを作成できませんでした

例外を発生させるコードは次のとおりです。

public static class NHibernateSessionManager
{
    private static ISessionFactory sessionFactory = new Configuration().Configure().BuildSessionFactory();

    public static ISession GetSession(string clientId)
    {
        if (ContextSession == null)
            ContextSession = sessionFactory.OpenSession(new OracleIntercerptor(clientId.ToUpper()));
        else
            ((OracleConnection)ContextSession.Connection).ClientId = clientId;

        return ContextSession;
    }

    // - snip -
}

例外が発生したコードの呼び出し:

    private ISession NHibernateSession
    {
        get 
        {
            return NHibernateSessionManager.GetSession(SessionWrapper.GetUser());
        }
    }

TypeInitializationExceptionを取得します

{"'Sigaf.Presupuesto.EntidadesDAL.NHibernate.NHibernateSessionManager'の型初期化子が例外をスローしました。"}

の内部例外を除いて

{"NHibernate.Driver.OracleDataClientDriverからドライバーを作成できませんでした。"}

さらにいくつかの内部例外により、NREが発生します。

オブジェクト参照がオブジェクトインスタンスに設定されていません。
NHibernate.Driver.OracleDataClientDriver..ctor()で

NHibernate v3.0 Target Framework v4.0このコード実装は、他の同様のソリューションで機能します。

ああ、Hibernate.configファイル:

<?xml version="1.0"?>
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
  <session-factory>
    <property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
    <property name="dialect">NHibernate.Dialect.Oracle10gDialect</property>
    <property name="current_session_context_class">web</property>
    <property name="proxyfactory.factory_class">NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu</property>
    <property name="connection.driver_class">NHibernate.Driver.OracleDataClientDriver</property>
    <property name="connection.connection_string_name">Sigaf</property>
    <property name="default_schema">PRE</property>
    <property name="show_sql">true</property>
    <mapping Assembly="Sigaf.Presupuesto.EntidadesDAL" />
  </session-factory>
</hibernate-configuration>
15
bevacqua

実際のOracleドライバがアプリケーションのbinフォルダにあることを確認してください。

Visual Studioでは、たとえば、プロジェクトにOracle.DataAcess.dllへの参照を追加する必要があります。

DLL=>右クリック=>プロパティグリッドでローカルコピー= Trueを選択します。

これで問題が解決するはずです。

35