1

これは、流暢な StructureMap を使用した NH の関連構成です。

ISessionFactory sessionFactory = fluentConfig.BuildSessionFactory();

For<Configuration>().LifecycleIs(new HybridLifecycle()).Singleton().Use(configuration);

For<ISessionFactory>().LifecycleIs(new HybridLifecycle()).Singleton().Use(sessionFactory);

For<ISession>().LifecycleIs(new ThreadLocalStorageLifecycle())
            .Use(x => x.GetInstance<ISessionFactory>().OpenSession());

For<IUnitOfWork>().LifecycleIs(new ThreadLocalStorageLifecycle())
            .Use<UnitOfWork>();

NH セッションは UnitOfWork オブジェクトにカプセル化されます。

私のWindowsサービスでは、セッションにアクセスするたびに、次のようにセッションを呼び出すスレッドプールスレッド内にあります。

unitOfWork = ObjectFactory.GetInstance<IUnitOfWork>();
  ...
  //Init repositories with the unitOfWork
  //Have repos do their thing
  ...
unitOfWork.Commit();
unitOfWork.Dispose();

上記の機能をテストしているとき、アプリケーションを初めて起動したときは常に機能しますが、それ以外のときはランダムに機能します。うまくいかない時は、セッションがnullだからです。前の呼び出しが終了してから約 30 秒待つと、次の呼び出しが成功することがわかりました。

なぜそれをするのでしょうか?スレッドごとにセッションを構成しようとしていますか?

4

1 に答える 1

3

私は2つのことをします、

  1. Nlogを接続し、Windowsサービスメソッド内にいくつかのトレースコードを出力します
  2. NHProfを接続し、UOWの周囲でセッションが適切に開始および終了していることを確認します。

私がセッションの問題に遭遇したとき、NHProfは非常に貴重だと思いますが、それは私をがっかりさせることはありませんでした。

NHProfを30日間試すことができ、 NlogはOSSです

于 2013-01-17T13:16:26.933 に答える