在实体框架中改变实体的状态4.1

时间:2011-08-10 09:12:11

标签: entity-framework-4.1 dbcontext

假设我们有一个Customer对象,它有一个Order对象。 Order对象具有OrderDetail对象。

Customer oCustomer 
using(var context = new MyContext)
{
oCustomer = context.Include("Order.OrderDetail").Find(1);
}
oCustomer.Name ="blah blah";
oCustomer.Order.Description = "blah blah";
oCustomer.Order.OrderDetail.Quantity = 10;

现在,我将Customer的状态更改为:

using(var context = new MyContext)
{
    context.Entry(oCustomer).State = EntityState.Modified.
    context.SaveChanges();
}

这只保存oCustomer对象,而不保存oCustomer中的Order和OrderDetail。由于context.Entry(oCustomer).State = EntityState.Modified仅更改oCustomer的状态而不更改Order和OrderDetail。目前,我必须手动更改ObjectGraph中每个实体的状态,以便保存更改。有没有办法改变整个ObjectGraph的状态而不仅仅是父实体?是否有任何扩展方法或任何其他方法可以做到这一点?

1 个答案:

答案 0 :(得分:4)

因为你正在削减上下文和实体之间的联系,所以没有。它不能自动知道所有条目都处于修改状态。

您可以创建自己的扩展方法(或将其添加到派生对象上下文类)以遍历所有属性并检查它们是否在配置中映射,如果是,则将它们设置为已修改。

我假设您在断开连接的环境中工作,最简单的方法是重做您在其他进程中所做的所有更改。再次从db加载实体,并填充属性并调用保存更改。

相关问题