什么触发实体框架来修复导航属性?

jnm*_*nm2 5 entity-framework

我找不到关于究竟是什么让实体框架决定在设置外键时查找正确的相关对象的好文档.

我正在使用延迟加载(但不是更改跟踪)代理.设置外键然后获取导航属性值将返回null,即使相关的导航对象已加载并位于DbContext中也是如此.

调用DetectChanges有效,但看起来很重.有没有其他方法可以在Entity Framework中进行修复?

Ger*_*old 7

你说得对。DetectChanges是触发关系修复的方法。如果您出于某种原因希望修复关系,请致电DetectChanges

但当DetectChanges您执行以下方法时,也会由 EF 本身调用:

  • 数据库集.添加
  • 数据库集查找
  • 数据库集.删除
  • 本地数据库集
  • DbContext.SaveChanges
  • 数据库集附件
  • DbContext.GetValidationErrors
  • DbContext.Entry
  • DbChangeTracker.Entries
  • 针对 DbSet 运行任何 LINQ 查询

(来自 Lerman & Miller 的书DbContext,第 60 页)。

正如您所看到的,设置外键值后对 EF 执行的几乎所有操作都会调用DetectChanges,因此,如果您之后还有其他有用的事情要做,请先执行这些操作并保存一次DetectChanges调用。