0

NHibernateセッションをThreadLocal内に保存することは理にかなっています。スレッドセーフであると想定して安全でセッションによる遅延読み込みの問題を解決できますか?また、スレッドが実行されている間、Sessionが利用可能であると仮定することも安全ですか?スレッドの面では、私はHttpRequetについて話しています。ThreadLocalを使ったスレッドごとのNHibernateセッション

また、NHibernateのセッションが不足していませんか?最大セッション数はありますか?私は多くのスレッドを持っている場合、それはOKですか?

+0

この「スレッドセーフ」とはどういう意味ですか、セッションの遅延読み込みの問題を解決しますか?レイジーローディングの問題によって – Rippo

+0

が発生した場合、ビューでレイジーローディングのためにマッピングされたオブジェクトを参照すると、セッションはクローズされた例外になります。パターンを表示する。スレッドセーフ、スレッドごとにセッションを取得できますか?競合状態は発生しません。 – DarthVader

+0

私はいつもセッションファクトリがスレッドセーフであると信じられていますが、セッションはそうではないので、ThreadLocalを使用して後であなたを噛み砕くことになります。 – Rippo

答えて

2

NHibernateセッションはスレッドセーフではありません。 1つのセッションを1つのセッションに関連付ける限り、正常に動作するはずです。

リクエストが開始されるたびにセッションが開かれ、リクエストが終了したときにセッションが開かれる、リクエストごとのセッション実装を使用する最もよい方法は、httpリクエストです。この場合、スレッドが実行されている間、セッションが利用可能であると仮定することは安全です。

通常、NHibernateはセッションを使い果たしませんが、可能な限り寿命の短いセッションを使用することをお勧めします。

+0

は理にかなっており、接続数に依存します。 – DarthVader

+0

@DarthVader:Session!= Connection。任意の量のnhセッションオブジェクトを持つことができます(システム内のメモリによってのみ制限されます)。http://ayende.com/blog/4123/what-is-the-cost-of-opening-a-session。 – Andreas

関連する問題