在我的应用程序中,我必须验证所有订单及其内容。
订单库的形状如下:
public class OrderInfo
{
public int Order_ID { get; set; }
(...)
public List<OrderDetailInfo> ListOrderDetails { get; set; }
}
所有其他字段都是简单的字段,例如帐单地址、订单总额等。
要将这些订单详细信息链接到订单,请使用 Order Detail 类:
public class OrderDetailInfo
{
public int OrderDetail_ID { get; set; }
public int Order_ID { get; set; }
public int InventoryID { get; set; }
public int OrderDetailQuantity { get; set; }
public OrderInfo Order { get; set; }
public InventoryInfo Inventory { get; set; }
}
如您所见,订单详细信息也链接到库存项目。因此,通过订单购买或出售物品将增加/减少其数量。
好吧,既然我们在这里,这是 InventoryInfo 类:
public class InventoryInfo
{
public int Inventory_ID { get; set; }
public int Object_ID { get; set; }
public ObjectInfo Object { get; set; }
public int Inventory_Nb_In_Stock { get; set; }
(...)
}
因此,基于所有三个类,我有这个方法需要验证订单的内容并更新与订单详细信息相关的每个项目的数量。
这是我如何进行的:
internal void ValidateSupplierOrder(OrderInfo _order, List<OrderDetailInfo> _listOldOrderDetails)
{
var orderQry = from o in mDb.OrderInfo
where o.Order_ID == _order.Order_ID
select o;
OrderInfo originalOrder = orderQry.Single();
foreach (var orderDetailInfo in _order.ListOrderDetails )
{
mDb.OrderDetailInfo.Add(orderDetailInfo);
mDb.SaveChanges();
}
foreach (var orderDetailInfo in _order.mListOrderDetail)
{
OrderDetailInfo info = orderDetailInfo;
var inventoryQry = from i in mDb.InventoryInfo
where i.Inventory_ID == info.Inventory_ID
select i;
InventoryInfo originalItem = inventoryQry.Single();
InventoryInfo itemToModify = originalItem;
itemToModify.Inventory_Nb_In_Stock += orderDetailInfo.OrderDetailQuantity;
mDb.Entry(originalItem).CurrentValues.SetValues(itemToModify);
mDb.SaveChanges();
}
mDb.Entry(originalOrder).CurrentValues.SetValues(orderToModify);
mDb.SaveChanges();
}
现在,如果我在进程继续(并使用调试模式)时查看数据库表,则值会正确更新。
但是现在,当我在应用程序的另一部分加载使用此方法更新的相同项目时,Inventory_Nb_In_Stock
字段显示的值与更新之前的值相同。因此,如果我有 5Blue Pens
并且我传递了 4 的订单,我的数据表显示我有 9 Blue Pens
,但是当我通过应用程序检查我有多少时Blue Pens
,它显示5。任何人都可以检查我的验证,我是否同时更新了太多值?我究竟做错了什么?
编辑
我进行了一些测试,似乎只有在我重建应用程序后才会更新该值。