可以使用ef 5跟踪子实体的更改吗?
示例:
域对象:预订(一对多)页面
var oldBook = context.Books.Include("Pages");
context.Entry(oldBook).CurrentValues.SetValues(updatedBook);此代码将使用来自updatedBook对象的简单属性值更新旧书对象的简单属性。
是否有任何方法来跟踪子集合?(本例中的页面)。或任何最佳做法如何做到这一点?
发布于 2013-02-06 22:31:48
你的问题有点模棱两可。
可以使用ef 5跟踪子实体的更改吗?
当然,除非使用IQueryable.AsNoTracking()或MergeOption.NoTracking显式禁用更改跟踪,否则可以跟踪附加到DBContext ObjectStateManager的任何实体的更改。
如果您真的想知道是否有一个函数可以这样做:
context.Entry(oldBook).CurrentValues.SetValues(updatedBook);
并将整个对象图的当前值--其中oldbook是根--设置为updatedBook对象图的更新值,则为no。
您必须遍历并为希望更新的每个页面调用context.Entry(oldPage).CurrentValues.SetValues(updatedPage)。
我认为您处于一个断开连接的场景中,您不能只从数据库中提取实体并使用自动更改跟踪并直接在跟踪实体上设置修改后的值,否则您可以使用附加到上下文的单个对象图,而不是使用两个实例(即旧书、更新的图书)。
如果您已经有了一个独立修改的对象图,那么您需要使用另一种方法从db检索实体并使用SetValues()将实体附加到修改后的上下文中。您仍然需要遍历对象图中的所有实体并对其执行相同的操作。
context.Entry(updatedBook).State = EntityState.Modified;
foreach(var p in updatedBook.Pages) context.Entry(p).State = EntityState.Modified;
context.SaveChanges();https://stackoverflow.com/questions/14735056
复制相似问题