EF:将实体附加到上下文并分配给同一个实体的新实例
问题描述:
所以我明白,在Entity Framework中,您可以将实体附加到当前上下文,并且它将以未更改的EntityState开始。我也从那一点开始改变那个实体的单个属性会导致实体框架只更新被更改的那些属性而不是每个属性。然而,我想知道如果我们连接一个实体会发生什么,然后立即将它设置为等于该实体类型的新实例。 EF会将整个实体标记为肮脏(EntityState.Modified)还是只会更新已更改的属性?EF:将实体附加到上下文并分配给同一个实体的新实例
答
因此,在我的问题,做我所提到的将进入状态更改为Detached不会更新保存。如果要通过将实体设置为等于另一个对象来修改实体,则必须使用数据上下文的.Entry方法来跟踪该实体。代码如下所示:
//We query local context first to see if it's there.
var attachedEntity = db.Carts.Local.Find(newCart.Id);
//We have it in the context, need to update.
if (attachedEntity != null) {
var attachedEntry = _context.Entry(attachedEntity);
attachedEntry.CurrentValues.SetValues(newCart);
}
您可以找到完整的示例here。您可以在页面底部找到它作为最后一个代码示例。该示例经过优化,仅更新可以更改的属性。
然而,使用这个有几个缺点。其中之一是,到目前为止,实体框架不支持使用.CurrentValues.SetValues()更新导航属性(相关实体)。这也仅适用于当前正在跟踪要更新的实体。所以你可能需要再次调用数据库来更新它。
你为什么不试试? –
我不知道如何在调试器中检查实体状态。我也可以做。 –
我只是设置该条目等于一个变量,并设置一个断点? –