我首先使用EF 4.1代码并且在更新Order实体时遇到问题,当现有实体包含OrderList的非null集合时,用户已删除了一些现有的并添加了新的订单列表。
我有域模型,如下所示
public class Order
{
public int Id { get; set;
public string Name { get; set;}
public ICollection<OrderList> OrderLists { get; set;}
}
public class OrderList
{
public int Id { get; set;}
public int OrderId { get; set;}
public string ItemDescription { get; set;}
public decimal Price { get; set;}
public virtual Order Order { get; set;}
}
这是我用来更新订单实体的代码。
using (var context = new MyDbContext())
{
var order = context.Orders
.Include("OrderLists")
.FirstOrDefault(o => o.Id == orderId);
order.Name = "New name"; // this gets saved
order.OrderLists.Clear(); // Does not delete the existing order list items
order.OrderLists = new List<OrderList> { new OrderList { OrderId = order.Id, ItemDescription = "New Item" } }; // Does not create new list
context.Orders.Attach(order);
context.Entry<Order>(order).State = System.Data.EntityState.Modified;
context.ChangeTracker.DetectChanges();
context.SaveChanges();
}
请指导我如何使用EF 4.1代码首先实现这一目标?
由于 大师
答案 0 :(得分:1)
这应该可以解决问题:
var order = context.Orders
.Include("OrderLists")
.FirstOrDefault(o => o.Id == orderId);
order.Name = "New name"; // this gets saved
foreach (var orderlist in order.OrderLists.ToList())
{
context.OrderLists.Remove(orderlist);
}
order.OrderLists.Clear();
order.OrderLists.Add(new OrderList { Id = order.Id, ItemDescription = "New Item" });
context.SaveChanges();
您需要单独删除订单列表项,然后清除该集合。