删除项目,如果订单没有更多项目,则删除整个订单
本文关键字:删除 项目 如果 单没 删除项目 | 更新日期: 2023-09-27 17:59:24
下面的代码从不删除订单,即使最后一项被删除了——为什么?如果没有更多项目,我想删除订单吗?
int orderItemId = 5;
OrderItem orderItem = DbContext.OrderItem.Find(orderItemId);
Order order = DbContext.Order.Find(orderItem.OrderId);
DbContext.OrderItem.Remove(orderItem);
if (DbContext.OrderItem.Count(x => x.OrderId == order.Id) == 0)
{
DbContext.Order.Remove(order);
}
DbContext.SaveChanges();
DbContext.OrderItem.Remove(orderItem); // [1]
if (DbContext.OrderItem.Count(x => x.OrderId == order.Id) == 0) // [2]
{
DbContext.Order.Remove(order);
}
DbContext.SaveChanges(); // [3]
当您从[1]
行的OrderItem
集合中删除orderItem
时,它实际上并没有在数据库中删除。项目将仅在[3]
行的SaveChanges()
调用中删除。在此之前,orderItem
只是发布删除,但没有删除。
但当您在[2]
行查询项目计数时,它是从数据库中查询的,该数据库包含orderItem
。
在检查现有项目之前,您需要将更改提交到数据库:
DbContext.OrderItem.Remove(orderItem);
DbContext.SaveChanges();
if (!DbContext.OrderItem.Any(x => x.OrderId == order.Id))
{
DbContext.Order.Remove(order);
DbContext.SaveChanges();
}
您需要先获取要删除的项,然后刷新。试试这个更强大的解决方案,告诉我你会得到什么结果:
var id = "2";
var orderItem = db.OrderItems.SingleOrDefault(item => item.Id == id);
if(orderItem != null)
{
// The items exists. So we remove it and calling
// the db.SaveChanges this will be removed from the database.
db.OrderItems.Remove(orderItem);
db.SaveChanges();
// Refresh or update any visible data with the new data source.
refreshGrid();
}
else {
// Replace orderItem.Id with identifying order item property.
Console.WriteLine(
String.Format("Attempted to remove order {0}, but it could not be found.", orderItem.Id)
);
}