【发布时间】:2021-01-30 11:49:51
【问题描述】:
所以我目前正在开发一个链接到数据库的 WPF 应用程序,并且我有一个方法,其中我有一个 for-each 循环,它遍历添加到我的购物篮中的每个项目并将这些项目添加到数据库,以便我可以打印收据。
当我在篮子中间有一件已售罄的商品时,我想停止 for-each 循环(不在任何其他商品中迭代)并显示一条消息,说明该商品缺货,以便用户可以编辑购物篮并删除该项目,然后再次打印收据。
当这种情况发生时,我收到一个错误,因为收据 ID 和一些项目已经添加(dbContext.Add(item))所以当用户再次点击打印收据时(修改售罄项目后),当我调用保存,我在实体上添加了数据,但尚未添加。
如果一件商品缺货,有什么方法可以将所有未保存的东西分开吗??
错误信息:
UpdateException: 无法确定主端 'Context.FK_Receipt_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();
}
}
【问题讨论】:
-
这能回答你的问题吗? Entity Framework 6 transaction rollback
标签: c# sql wpf entity-framework