C# 实体框架5跟踪更改

C# 实体框架5跟踪更改,c#,.net,entity-framework,entity-framework-5,C#,.net,Entity Framework,Entity Framework 5,我可以使用ef 5跟踪子实体的更改吗 示例: 域对象:书本(一对多)页 此代码将使用updatedBook对象的简单属性值更新old book对象的简单属性 是否有任何方法可以跟踪子集合?(本例中为页面)。或者有什么最佳实践如何做到这一点?你的问题有点模棱两可 我可以使用ef 5跟踪子实体的更改吗 当然,除非您使用IQueryable.AsNoTracking()或MergeOption.NoTracking明确禁用更改跟踪,否则您可以跟踪附加到DBContextObjectStateManag

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

示例:

域对象:书本(一对多)页

此代码将使用updatedBook对象的简单属性值更新old book对象的简单属性


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

你的问题有点模棱两可

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

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

如果您真的想知道是否有一个函数可以执行此操作:

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

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

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

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

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

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

你的问题有点模棱两可

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

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

如果您真的想知道是否有一个函数可以执行此操作:

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

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

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

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

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

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

您指的是一般意义上的还是具体意义上的
DBEntityEntry.CurrentValues.SetValues()
?您指的是一般意义上的还是具体意义上的
DBEntityEntry.CurrentValues.SetValues()