2

IRepository実装に提供されるIDbContextオブジェクトを作成しました。DbContextは、ビジネスロジックがトランザクションを作成、コミット、ロールバックし、必要に応じてコミットする方法を提供します。また、NHibernate ISessionを転送するため、IRepositoryのNHibernate実装がアクセスできます。

このセットアップをWebアプリケーションで使用しています。このセットアップでは、リクエストごとに1つのDbContextが作成され、すべてのリポジトリで共有されます。リクエストの最後に、ISessionを破棄します。

標準的なNHibernateプラクティスの経験または知識を通じて、セッションを破棄してクローズしようとしているときに、DbContextをフラッシュして、未処理のトランザクション(エラーがない場合)を自動的にコミットすることは許容されますか?

4

2 に答える 2

1

これは一般的な慣行であり、確かに受け入れられますが、私が好むものではありません。リクエストの終了が遅すぎて、意味のある例外処理を実行できないという点で、重大な欠点があると思います。例外をキャッチしてそこで処理できるように、ページでトランザクションを処理することを好みます。実際、現在の ISession に開いているトランザクションがある場合、EndRequest ハンドラーで例外をスローします。

于 2010-06-29T02:05:38.637 に答える
1

はい、前回確認したときは、これが S#arp アーキテクチャで使用されているアーキテクチャだと思います。また、論理的にも理にかなっていると思います-エラーが発生していない場合、すべてをデータベースにコミットしたくないのはなぜですか?

于 2010-06-29T01:19:38.630 に答える