通过EntityState.Modified更新时EF做了什么?

时间:2013-05-29 11:27:01

标签: entity-framework navigation-properties

假设常规Controller和ApiController的上下文ProxyCreationEnabledLazyLoadingEnabled分别设置为truefalse

有一种方法可以更新EF中的实体,将其状态设置为EntityState.Modified

_context.Entry(newEntity).State = EntityState.Modified;
_context.SaveChanges();

当实体加载到Controller时,一切都按预期工作。至于我的导航属性为ApiController的{​​{1}} - 因为禁用了该上下文实例的代理。

如果我更改任何属性或将其状态设置为null并保存更改,会发生什么? 实体框架将对那些Modified导航属性执行什么操作?

1 个答案:

答案 0 :(得分:2)

这取决于您是使用独立或外键关联。

对于独立关联 - 这些是没有外键作为模型中的属性的关联,但只有导航属性 - 如果设置状态,则数据库中的导航属性和外键值不会发生任何事情到Modified。它们保持不变,因为生成的UPDATE语句不包含FK列值的更改。顺便提一下,如果导航属性 null,情况也是如此。将实体状态设置为Modified不会影响导航属性,只会影响标量属性。

如果您有外键关联 - 将外键作为模型中的属性的关联 - 将状态设置为Modified会将外键属性标记为Modified,因为它是标量属性。因此,即使导航属性为null,当前FK属性值也将写入数据库并可能更改其中的关系。