0

NHibernate を使用して最初のアプリケーションを作成しています。残念ながら、解決できない問題が発生しました。

CRUD メソッドと NHibernateHelper クラスを含む「DAL」プロジェクトからデータベースにアクセスしています。

テスト プロジェクトを作成し、オブジェクトを DB に追加しようとしましたが、完全に機能します。しかし、アプリケーションの ViewModel (他のプロジェクトにもある) から同じメソッドを呼び出そうとすると、以下のコードのconfiguration.BuildSessionFactory()でエラーがスローされます。

private static ISessionFactory SessionFactory
    {
        get
        {
            if (_sessionFactory == null)
            {
                var configuration = new Configuration();
                configuration.Configure();
                configuration.AddAssembly(typeof(Address).Assembly);
                _sessionFactory = configuration.BuildSessionFactory();
            }
            return _sessionFactory;
        }
    }

例外:

NHibernate.HibernateException: Could not create the driver from NHibernate.Driver.OracleDataClientDriver.
System.Reflection.TargetInvocationException: {"Exception has been thrown by the target of an invocation."}
System.NullReferenceException: {"Object reference not set to an instance of an object."}

私のテスト プロジェクトでは、Oracle.DataAccess.dll への参照を追加し、それがないと同じエラーがスローされるため、App.config を作成しました。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
  <qualifyAssembly partialName="Oracle.DataAccess"
         fullName="Oracle.DataAccess,
                        Version=4.112.2.0,
                       Culture=neutral,
                       PublicKeyToken=89b483f429c47342" />
</assemblyBinding>
</runtime>
</configuration>

DBからデータを取得する必要があるViewModelを含むプロジェクトで同じことを行いましたが、役に立ちませんでした。また、その参照のために Copy Local を True に設定しましたが、役に立ちませんでした。

それは私のApp.configです:

<?xml version="1.0" encoding="utf-8" ?>
<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="connection.driver_class">
      NHibernate.Driver.OracleDataClientDriver
    </property>
    <property name="connection.connection_string">
      User Id=****;
      Password=****;
      Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=
      (PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
      (CONNECT_DATA=(SERVICE_NAME=xe)));
      Pooling=true;
      Enlist=false;
      Statement Cache Size=50;
      Min Pool Size=10;
      Incr Pool Size=5;
      Decr Pool Size=2;
    </property>
    <property name="show_sql">
      true
    </property>
  </session-factory>
</hibernate-configuration>

NHibernate v 3.3.1.4000、Oracle 11g xe、および 64 ビットの Windows 7 を使用しています (32 ビットまたは 64 ビットでデバッグすることを選択できません。選択できる可能性は「アクティブ (任意の CPU)」の 1 つだけです)。

テスト プロジェクトからは使用できるが、他のプロジェクトからは使用できない理由は何ですか?

前もって感謝します

4

2 に答える 2

1

問題は解決しました。データベースを使用するdllライブラリではなく、メインプロジェクトにapp.configを配置する必要がありました。クラスライブラリに配置されたapp.configが無視されることを知りませんでした。

于 2012-07-10T07:23:39.470 に答える
1

Web プロジェクトまたは DAL にドライバーの dll への参照がありますか? Copy Localをtrueに設定してWebプロジェクトに配置する必要があります。この同様の質問を参照してください

于 2012-07-09T13:30:58.470 に答える