nHibernate セッションを使用する多くの永続化呼び出しを含むメソッドがありましたが、それは機能し、問題ありませんでした。しかし、マルチスレッドの理由から、ループ内のコンテンツからメソッドを抽出して、このメソッドをリファクタリングする必要がありました。次に、このメソッドでクラスを作成しました。通常のリファクタリングのようなものですが、このメソッド呼び出し内の nHibernate セッションが壊れており、コンテキストがなく、どの時点でもファイナライズしていません。マルチスレッドで nHibernate に問題がありますか? もう 1 つのスレッドしか実行していない場合でも、同じ問題が発生します。
私は、SessionFactory と Façade パターンを通じて nHibernate Session を使用しています。つまり、セッションはこれらのオブジェクトのフィールドではなく、SessionFactory でグローバルです。
もう少し明確にする:
前:
Method()
{
... persistence calls
foreach(Thing..)
{
...persistence calls for each thing (1)
}
...
}
後:
Method()
{
... persistence calls
foreach(Thing..)
{
create a thingResolver object with some data
open a new thread with thingResolver.Method (1)
starts this thread
}
.. waits for finishing threads and continues
}
nHibernate セッション ファクトリはスレッド対応で、スレッドごとに nHibernate セッションを保存/取得します。それは今うまく機能しています;)