Web サイトで実行される一般的な操作を想像してみましょう。
ユーザーがボタンを押した後、アプリケーションは次のことを行う必要があります。
- 操作が許可されているかどうかの条件を確認します (ユーザー権限、オブジェクトの一貫性、関係など)。
- DB レコードの更新
- 報告
これはビジネス ロジック層の関心事であり、多くの本に書かれています。実際、最初にDBからデータを読み取り、次にDBにデータを書き込みます。また、チェック中に他のユーザー/プロセスによってデータが変更された場合、無効な結果がデータベースに入れられます。問題はよく知られているようですが、私はまだこれに対する良い解決策を見つけることができません.
問題は、ビジネス トランザクションを維持する機会がないのに、なぜビジネス ロジック層が必要なのかということです。
おそらく、TransactionScope と言うでしょう。では、読み取りデータが外部プロセスによって変更されないようにするにはどうすればよいでしょうか? ビジネス層から UPDLOCK を実行するにはどうすればよいですか? 可能であれば、ストアド プロシージャでトランザクションを実行するよりもはるかにコストがかかるのではないでしょうか?
ロジックの一部を DB に持ち込む方法はなく、全体のみです。パート 1 と 2 の両方を同じトランザクションで実装する必要があり、さらに、更新が行われるまで読み取りデータをロックする必要があります。
アイデア?