首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架5跟踪更改

实体框架5跟踪更改
EN

Stack Overflow用户
提问于 2013-02-06 17:21:56
回答 1查看 4.1K关注 0票数 1

可以使用ef 5跟踪子实体的更改吗?

示例:

域对象:预订(一对多)页面

代码语言:javascript
复制
var oldBook = context.Books.Include("Pages");
context.Entry(oldBook).CurrentValues.SetValues(updatedBook);

此代码将使用来自updatedBook对象的简单属性值更新旧书对象的简单属性。

是否有任何方法来跟踪子集合?(本例中的页面)。或任何最佳做法如何做到这一点?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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()将实体附加到修改后的上下文中。您仍然需要遍历对象图中的所有实体并对其执行相同的操作。

代码语言:javascript
复制
context.Entry(updatedBook).State = EntityState.Modified;
foreach(var p in updatedBook.Pages) context.Entry(p).State = EntityState.Modified;
context.SaveChanges();
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14735056

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档