2

假设我们有一个 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;

现在当我改变客户的状态如下:

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 的状态而不仅仅是父实体?是否有任何扩展方法或任何其他方法可以做到这一点?

4

1 回答 1

4

由于您正在切断上下文和实体之间的链接,因此不。它不能自动知道所有条目都处于修改状态。

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

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

于 2011-08-10T09:16:10.867 回答