如何使用Entity Framework获取嵌套的Foreign Key属性

时间:2012-04-02 13:01:27

标签: c# linq entity-framework lambda

我对实体框架中的外键(EF4)有疑问。

假设我有课程:

public class E1
{
   public int Id{get;set;}
   Public string name{get;set;}
}
public class E2
{
   [ForeignKey("e1")]
   public int E1Id{get;set;}

   [ForeignKey("E1Id")]
   public E1 e1{get;set;}

}
public class E3
{
   [ForeignKey("e2")]
   public int E2Id{get;set;}

   [ForeignKey("E2Id")]
   public E2 e2{get;set;}
}
public class E4
{
}
分别是

,我想通过调用class E1的对象(内部调用class E4)以及{{{}来访问E3E2的属性1}}如上所示调用E2但是当我尝试访问E1的属性时,会抛出E1异常,那么获取object null reference属性的可能方法是什么?

1 个答案:

答案 0 :(得分:2)

您需要使用预先加载,延迟加载或显式加载来强制加载关系。

当您加载主要实体时,急切加载会立即加载您的关系:

var e4 = context.E4Set.Include(e => e.E3.E2.E1).First(...);

延迟加载将在您第一次访问它们时按需透明地加载您的关系(它将为每个访问的导航属性触发单独的数据库查询)。要使此工作在支持延迟加载的每个实体中的所有导航属性必须为virtual

显式加载要求您在已加载的实体上手动执行加载:

var e4 = context.EF4Set.First(...);
var entry = context.Entry(e4);
entry.Reference(e => e3).Load();

你可以将它与渴望加载结合起来:

entry.Reference(e => e3).Query().Include(e => e.E2.E1).Load();