使用EntityState.Modified的EF更新

时间:2015-05-15 05:28:34

标签: entity-framework

通常我正在使用此代码

Member member = ctx.Members.Find(id);
member.Name = txtName.Text;
ctx.Entry(member).State = EntityState.Modified;
ctx.SaveChanges();

当我想使用实体框架更新模型时。我在SO上找到了一个不使用EntityState.Modified来更新模型的示例。我试图删除该行,它仍在工作。使用EntityState.Modified的优缺点是什么,不使用EntityState.Modified

注意:我在WinForms中使用Entity Framework 6 Code First

3 个答案:

答案 0 :(得分:15)

EntityState.Modified在您的情况下是无用的,因为当您从上下文中检索它时,上下文已经跟踪了您正在更新的实体。

在以下情况下,您不需要从上下文中检索实体:

Member member = new Member({Id=1, Name="member"}) ;
context.Entry(member).State = EntityState.Modified; 
context.SaveChanges();

此外,正如上一个答案所述,您的上下文有时只跟踪数据库的有限“视图”,因此您需要像上面一样手动启动跟踪。

Microsoft doc

答案 1 :(得分:4)

就像其他人提到的那样,你的上下文会自动跟踪对象的变化。

我发现它更有用,例如当我使用return json到mvc控制器时,原始对象在第一次转换为视图的json时失去了更改跟踪。在这种情况下,我必须在保存更改之前专门设置对象实体状态。

答案 2 :(得分:2)

如果您正在使用更改跟踪,那么代理对象会自动监听属性更改并更新上下文,这在mvvm非常有用,您只需将属性绑定到控件,而不必编写代码来更新上下文

如果您没有使用更改跟踪(例如,当您处理大量实体时),您必须自己更新上下文