我开发了一个在线购买我的产品的应用程序。我在商店里有一种产品“雨伞”,有100个。我已经开发了一个在线购买我的产品的应用程序。但是,当同时购买时会出现问题。
如果同时发生两次交易,AvailableQty将会更新不正确。假设有两笔交易同时发生,购买数量为100和50。理想情况下,第一笔交易(购买数量为100)应该成功,因为我们有100个库存可用。但第二笔交易应该返回错误,因为库存不足以处理,因为第一笔交易的余额为0(100-100)。但是以上情况下,这两笔交易都成功了,余额现在显示为-50。
当存在两个单独的事务时,它会正常工作。但是当这两个事务同时发生时就会出现问题。这个问题的原因是,在并发交易时,检查可用性的条件同时命中,此时条件得到满足,因为DB表还没有更新到最新的数量。
我该如何纠正这个问题?
如果同时发生两次交易,AvailableQty将会更新不正确。假设有两笔交易同时发生,购买数量为100和50。理想情况下,第一笔交易(购买数量为100)应该成功,因为我们有100个库存可用。但第二笔交易应该返回错误,因为库存不足以处理,因为第一笔交易的余额为0(100-100)。但是以上情况下,这两笔交易都成功了,余额现在显示为-50。
当存在两个单独的事务时,它会正常工作。但是当这两个事务同时发生时就会出现问题。这个问题的原因是,在并发交易时,检查可用性的条件同时命中,此时条件得到满足,因为DB表还没有更新到最新的数量。
我该如何纠正这个问题?
public bool UpdateStock(int productId, int purchaseQty)
{
using(var db = new MyEntities())
{
var stock = db.Products.Find(productId);
if (stock.AvailableQty >= purchaseQty) // Condition to check the availablity
{
stock.AvailableQty = stock.AvailableQty - purchaseQty;
db.SaveChanges();
return true;
}
else
{
return false;
}
}
}