如何更新导航集合属性

时间:2014-01-29 17:47:45

标签: c# entity-framework

我只是想使用Entity Framework 6更新客户和他的一个订单。我试过这个,但它只更新客户而不是他的订单:

Customer customer = db.Cutomers.Include(x => x.Orders).Where(y => y.Id  ==1234).SingleOrDefault();
customer.Name = "Joe";              //  changing the customer name
customer.Orders[0].OrderDesc = "NewDesc";  //  changing one of the orders
customer.Orders[0].OrderDate = DateTime.Now;

using (var db = new Context())
{      
       db.Cutomers.Attach(customer);
       db.Entry(customer).Collection(e => e.Orders).Load();
       db.Entry(customer).State = EntityState.Modified;   
       db.SaveChanges();
}

2 个答案:

答案 0 :(得分:1)

您在进行更改后正在加载Orders集合,因此基本上这将覆盖您之前所做的更改。 由于您正在编辑Order,因此您需要Attach订单本身到集合,以便更新。

修改

db.Orders.Attach(customer.Orders[0]);

答案 1 :(得分:0)

您需要明确附加孩子。无论如何最好自己这样做,我确信你不希望每次数据库调用都自动更新每个实体的整个实体树。