EntityFrameworkがどのように機能するかを学ぼうとしています。EF SaveChangesは、基本的にトランザクション更新のラッパーであることを理解しています。また、必要に応じて2つのコンテキストをTransactionScopeでラップできることも理解しています。
私はコードファーストアプローチを使用しています。
私が理解していないのは、次のような更新をどのように行うかです。
UPDATE Inventory SET Available = Available - 1 WHERE Available > 0
言い換えると、更新を行う前に、少なくともX個の使用可能な在庫があることを確認するにはどうすればよいですか?
製品の在庫を調べて、購入を完了するのに十分な在庫があることを確認するコードを記述できると思います。
if (Product.Inventory - quantityToPurchase < 0) throw new Exception(..)
しかし、2人の顧客が同時に購入しようとし、各顧客のデータベースからフェッチされたオブジェクトが2つのアイテムを在庫に持っていると主張するシナリオではどうでしょうか。上記の私の論理はそれを捕らえません。
SaveChanges()メソッドがオブジェクトIFにのみ変更をコミットし、IFのみ(Available - quantity)
が0より大きいことを確認するにはどうすればよいですか?