これはよくある質問ですが、これまでに見つかった説明と観察された動作は多少異なります。
MVCWebサイトで次のnHibernate戦略が必要です。
- リクエストのA
SessionScope(変更を追跡するため) - インサートのみをラップする
ActiveRecord.TransactonScope(バッチのロールバック/コミットを有効にするため) - トランザクションの外部にあることを選択します(ロックの範囲を減らすため)
- 挿入の遅延フラッシュ(セッションの終了時に挿入/更新がUoWとして発生するように)
現在、私たちは:
SessionScope(FlushAction AutoまたはNeverを使用して)から暗黙のトランザクションを取得しないでください- 使用する場合
ActiveRecord.TransactionScope、遅延フラッシュはなく、含まれている選択も長時間実行されるトランザクションに追いつきます。
古いバージョンのnHibernate(2.0に非常に近いトランクからのもの)があるためかどうか疑問に思います。
期待されるnHibernateの動作を取得できず、パフォーマンスが低下します(NHProfとSqlProfilerを使用してdbロックを監視します)。