假设常规Controller和ApiController的上下文ProxyCreationEnabled
和LazyLoadingEnabled
分别设置为true
和false
。
有一种方法可以更新EF中的实体,将其状态设置为EntityState.Modified
。
_context.Entry(newEntity).State = EntityState.Modified;
_context.SaveChanges();
当实体加载到Controller
时,一切都按预期工作。至于我的导航属性为ApiController
的{{1}} - 因为禁用了该上下文实例的代理。
如果我更改任何属性或将其状态设置为null
并保存更改,会发生什么?
实体框架将对那些Modified
导航属性执行什么操作?
答案 0 :(得分:2)
这取决于您是使用独立或外键关联。
对于独立关联 - 这些是没有外键作为模型中的属性的关联,但只有导航属性 - 如果设置状态,则数据库中的导航属性和外键值不会发生任何事情到Modified
。它们保持不变,因为生成的UPDATE语句不包含FK列值的更改。顺便提一下,如果导航属性不 null
,情况也是如此。将实体状态设置为Modified
不会影响导航属性,只会影响标量属性。
如果您有外键关联 - 将外键作为模型中的属性的关联 - 将状态设置为Modified
会将外键属性标记为Modified
,因为它是标量属性。因此,即使导航属性为null
,当前FK属性值也将写入数据库并可能更改其中的关系。