我只是想使用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();
}
答案 0 :(得分:1)
您在进行更改后正在加载Orders
集合,因此基本上这将覆盖您之前所做的更改。
由于您正在编辑Order
,因此您需要Attach
订单本身到集合,以便更新。
修改强> 的
db.Orders.Attach(customer.Orders[0]);
答案 1 :(得分:0)
您需要明确附加孩子。无论如何最好自己这样做,我确信你不希望每次数据库调用都自动更新每个实体的整个实体树。