我有两个实体SalesRep和Customer。 我的客户有一个OEM的SalesRep和直接SalesRep的,因此两个外键,像这样:显式加载的EF 5.0错误?
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填充时,我没有明确装呢?
谢谢,这是我的想法,但我找不到任何文档说明如此。我看到EF足够聪明,但它在哪里记录?谢谢。 – BBauer42 2013-03-19 18:22:31
我从来没有见过它的记录,但EF的表现,至少EF 4.0以来的表现。尽管如此,我看不到行为发生变化,因为很多人依赖它。 – 2013-03-19 18:32:10