アプリケーションが処理するすべての Web リクエストで、アプリケーション全体をトランザクション対応にする必要があります。
トランザクションを開始する必要があり、コントローラーに例外がなかった場合はコミットします。それ以外の場合は、ロールバックします。
これまでのところ、次の実装があります。
- まず、依存関係としてコントローラーにトランザクションを作成します。
- 次に、コントローラー/サービス/リポジトリ/その他の作業を行います。
- 最後に、メインの抽象コントローラー クラスがその
OnActionExecuted
メソッドを実行します。ここで、コミットするかしないかのどちらかです。
私が使用しているテクノロジーのリストは次のとおりです。
- MVC4
- ニンジェクト
- オートマッパー
- サービスパターン
さて、私が知りたいのはデッドロックについてです。2 つの Web リクエストが同時に処理され、さらに 2 つのリポジトリ (それらのDataContext
インスタンスにリンクされている)、つまりデータベース内の2 つのテーブルを操作する権利を取得するとどうなるでしょうか?
例: 1 つの要求が最初にテーブルを読み取りTable1
、次にを読み取りTable2
、その間に別の要求が を処理しTable2
、次に を処理したいとしTable1
ます。
私は何をすべきか?