我有两个实体,SalesRep 和 Customer。我的客户有一个 OEM SalesRep 和一个 Direct SalesRep,因此有两个外键,如下所示:
public int OemRepId { get; set; }
[ForeignKey("OemRepId")]
public SalesRep OemRep { get; set; }
public int DirectRepId { get; set; }
[ForeignKey("DirectRepId")]
public SalesRep DirectRep { get; set; }
在我的上下文中,我禁用了延迟加载(并且属性不是虚拟的)。我想在整个项目中强制显式加载。这是我在上下文的构造函数中禁用 LazyLoading 的方法。
this.Configuration.LazyLoadingEnabled = false;
现在,当我从上下文中收到客户属性时,OemRep 和 DirectRep 都是正确的 NULL。
然后我可以像这样显式加载 OemRep:
//I already have my CurrentCustomer entity loaded with its OemRep and DirectRep both NULL
_ctx.Entry(currentCustomer).Reference(c => c.OemRep).Load();
如果我在此行之后立即中断代码,我会看到 OemRep 引用属性现在已加载。这是错误。
如果 OemRepId 和 DirectRepId 恰好相同,则 OemRep 和 DirectRep 引用属性都已填充。如果它们碰巧不同,我必须像这样显式加载它们:
_ctx.Entry(currentCustomer).Reference(c => c.OemRep).Load();
_ctx.Entry(currentCustomer).Reference(c => c.DirectRep).Load();
为什么在我没有显式加载 DirectRep 时填充它?