gpt4 book ai didi

c# - Entity Framework 5 跟踪更改

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:38 24 4
gpt4 key购买 nike

我可以使用 ef 5 跟踪子实体的变化吗?

示例:

领域对象:书籍(一对多)页面

var oldBook = context.Books.Include("Pages");
context.Entry(oldBook).CurrentValues.SetValues(updatedBook);

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

有什么方法可以跟踪子集合?(在本例中为页面)。或者任何最佳实践如何做到这一点?

最佳答案

你的问题有点模棱两可。

Can I track changes of child entities using ef 5?

当然,除非您使用 IQueryable.AsNoTracking()MergeOption.NoTracking 明确禁用更改跟踪,否则您可以跟踪附加到 的任何实体的更改DBContext ObjectStateManager.

如果你真的想问是否有一个函数可以做到这一点:

context.Entry(oldBook).CurrentValues.SetValues(updatedBook);

然后将整个对象图的当前值(其中 oldbook 是根)设置为 updatedBook 对象图的更新值,然后,不。

您必须为每个要更新的页面循环并调用 context.Entry(oldPage).CurrentValues.SetValues(updatedPage)

我认为您处于断开连接的场景中,您不能只从数据库中提取实体并使用自动更改跟踪并直接在跟踪的实体上设置修改后的值,否则您可以只使用单个对象图附加到上下文而不是使用两个实例(即旧书、更新的书)。

如果您已经有一个分离的修改对象图,您需要使用替代方法从数据库中检索实体并使用 SetValues() 将实体附加到修改后的上下文。您仍然需要遍历对象图中的所有实体并执行相同的操作。

context.Entry(updatedBook).State = EntityState.Modified;
foreach(var p in updatedBook.Pages) context.Entry(p).State = EntityState.Modified;
context.SaveChanges();

关于c# - Entity Framework 5 跟踪更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14735056/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com