如何在保存到实体框架之前分离实体



因此,我目前正在开发一个链接到数据库的WPF应用程序,并且我有一个方法,在该方法中,我使用for each循环迭代添加到我的购物篮中的每个项目,并将这些项目添加到数据库中,以便打印收据。

当我的购物篮中间有一个商品已经售罄时,我想停止for each循环(不在任何其他商品中迭代(,并显示一条消息,解释该商品缺货,这样用户就可以编辑购物篮并删除该商品,然后再次打印收据。

当这种情况发生时,我会收到一个错误,因为收据ID和一些项目已经添加(dbContext.Add(item)(,所以当用户再次单击打印收据时(修改已售罄的项目后(,当我调用save时,我已经添加了实体的数据,但尚未添加。

如果一件物品缺货,是否有任何方法可以分离所有未保存的物品

错误消息:

UpdateException:无法确定'上下文.FK_Recept_Item_Receipt'关系。多次添加实体可以具有相同的主键。

public void AddToDatabase()
{
boolean canPrintReceipt = true;
Receipt receipt= new Receipt
{
ID = Guid.NewGuid()
};
Db.Receipts.Add(receipt);
foreach (KeyValuePair<string, int> entry in Basket)
{
Item item= new Item();

if // item is out of stock
{
canPrintReceipt = false;
break;
}
else //Add new Item
{
...
...
Db.Items.Add(item);
}
Receipt_Item receiptItems = new Receipt_Jugada
{
ReceiptID = receip.ID,
ItemID = item.ID,
...,
...
};
Db.Receipt_Items.Add(receiptItems);
}
if (canPrintReceipt)
{
Db.SaveChanges();
Basket.Clear();
}
}

您的最佳选择可能是使用事务。

启动事务。如果遇到缺货项目,请回滚事务,然后可以在从购物车中删除缺货项目后再次运行该流程。

如果所有东西都有库存,并且一切正常,您可以提交事务,所有东西都将保存到数据库中。

这里有一个基本知识的链接。

祝你好运!

最新更新