我正在尝试了解实体框架的工作原理。我了解 EF SaveChanges 基本上是围绕事务更新的包装器。我还了解到,如有必要,您可以将两个上下文包装在 TransactionScope 中。
我正在使用代码优先方法。
我不明白的是我将如何进行更新
UPDATE Inventory SET Available = Available - 1 WHERE Available > 0
换句话说 - 我如何确保在进行更新之前至少有 X 个可用库存?
我想我可以编写代码来查看产品的库存并验证是否有足够的库存来完成购买:
if (Product.Inventory - quantityToPurchase < 0) throw new Exception(..)
但是,如果两个客户试图同时购买,并且从数据库中为每个客户获取的对象声称有 2 件物品在库存中,那该怎么办?我上面的逻辑不会明白这一点。
如何确保 SaveChanges() 方法仅在 IF 和 ONLY IF(Available - quantity)
大于 0 时提交对对象的更改?