通常我正在使用此代码
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
答案 0 :(得分:15)
EntityState.Modified在您的情况下是无用的,因为当您从上下文中检索它时,上下文已经跟踪了您正在更新的实体。
在以下情况下,您不需要从上下文中检索实体:
Member member = new Member({Id=1, Name="member"}) ;
context.Entry(member).State = EntityState.Modified;
context.SaveChanges();
此外,正如上一个答案所述,您的上下文有时只跟踪数据库的有限“视图”,因此您需要像上面一样手动启动跟踪。
答案 1 :(得分:4)
就像其他人提到的那样,你的上下文会自动跟踪对象的变化。
我发现它更有用,例如当我使用return json到mvc控制器时,原始对象在第一次转换为视图的json时失去了更改跟踪。在这种情况下,我必须在保存更改之前专门设置对象实体状态。
答案 2 :(得分:2)
如果您正在使用更改跟踪,那么代理对象会自动监听属性更改并更新上下文,这在mvvm非常有用,您只需将属性绑定到控件,而不必编写代码来更新上下文
如果您没有使用更改跟踪(例如,当您处理大量实体时),您必须自己更新上下文