0

假设一个常规 Controller 和一个 ApiController 及其上下文ProxyCreationEnabled,并LazyLoadingEnabled设置为truefalse

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

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

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

如果我更改任何属性或将其状态设置为Modified并保存更改会发生什么?实体框架将如何处理这些null导航属性?

4

1 回答 1

2

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

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

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

于 2013-05-29T23:41:52.930 回答