EF使用EntityState.Modified进行更新

13
通常我使用这段代码。
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个回答

19

在您的情况下,EntityState.Modified是无用的,因为您要更新的实体已经被上下文追踪,因为您从上下文中检索它。

只有在以下情况下需要使用它,即您没有从上下文中检索实体:

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

正如先前的回答所述,你的上下文有时只跟踪数据库的有限“视图”,因此你需要像上面那样手动初始化跟踪。

Microsoft doc


4

像其他人所提到的,您的上下文自动跟踪对象的更改。

例如,当我使用返回json到mvc控制器时,我发现它更有用,因为当原始对象首次转换为视图的json时,会失去更改跟踪功能。在这种情况下,我必须在保存更改之前明确设置对象的实体状态。


2
如果您正在使用变更跟踪,则代理对象会监听属性更改并自动更新上下文,这在 MVVM 中非常有用,因为您只需将属性绑定到控件,而不必编写代码来更新上下文。
如果您没有使用变更跟踪(例如处理大量实体时),则必须自己更新上下文。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接