私は現在、コードファーストエンティティフレームワーク(5.0)を使用してASP.NETMVC4アプリケーションを作成しています。これは、ASP.NETMVCとEntityFrameworkを使用した最初のプロジェクトであるため、詳細のいくつかにかなり圧倒されています。このアプリケーションは、レジ係によるスーパーマーケットでの取引を処理します。
スーパーマーケットで販売するために、私は利用可能な製品のリストとそれぞれの利用可能な金額を持っています。ロジックが指示するように、特定の製品の量が常にマイナスになることはありません。したがって、私の質問は、可能な限り最良の方法で並行性を解決するにはどうすればよいかということです。
これが発生すると、問題が発生する可能性があります。
バナナは4本あります。キャッシャーAは2本のバナナの販売を試みます。キャッシャーBは、3本のバナナを同時に販売しようとします。両方のトランザクションが成功した場合、データベースには-1バナナが残り、無効な状態になります。
では、これを防ぐための最良の方法は何ですか?私はいくつかのオプションを見つけようとしましたが、どれを選択するか、またはそれらが適切かどうかわかりません。
- データベースに変更が加えられていない場合にのみすべてのトランザクションが行われるように、Rowversion列を追加します。ここで私が見ている問題は、同時に多くのトランザクションが発生する可能性があり、そのような厳しいチェック(別のレジ係がトランザクションを行うたびにエラーを返す)が私たちが維持する必要があることを考えると価値があるかどうかわからないことです正の金額。つまり、問題を引き起こすトランザクションは1日に1〜2回しかない可能性があり、キャッシャーは常に売り上げを再確認する必要があります。
- トランザクション内のすべてのSaveChangesの後にチェックを実行し、アイテムの量が無効な場合はロールバックします。
どんな助けでもいただければ幸いです!