所以我理解,在Entity Framework中,您可以将实体附加到当前上下文,它将以EntityState of Unchanged开头。我还认为,从那时起改变该实体的各个属性会导致实体框架仅更新那些已更改的属性而不是每个属性。但是,我想知道如果我们附加一个实体然后立即将它设置为等于该实体类型的新实例会发生什么。 EF会将整个实体标记为脏(EntityState.Modified)还是仅更新已更改的属性?
答案 0 :(得分:0)
所以关于我的问题,做我提到的将把条目状态改为Detached,它不会在保存时更新。如果要通过将实体设置为等于另一个对象来修改实体,则必须使用数据上下文的.Entry方法跟踪实体。代码看起来像这样:
Foo(1, arg2=2)
您可以找到完整示例here。您可以在页面底部找到它作为最后一个代码示例。该示例已经过优化,只能更新可能的更改属性。
然而,使用它有一些缺点。一个是截至目前,Entity Framework不支持使用.CurrentValues.SetValues()更新导航属性(相关实体)。这仅适用于当前正在跟踪要更新的实体的情况。因此,您可能需要再次调用数据库来进行更新。