我对实体框架中的外键(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
)以及{{{}来访问E3
中E2
的属性1}}如上所示调用E2
但是当我尝试访问E1
的属性时,会抛出E1
异常,那么获取object null reference
属性的可能方法是什么?
答案 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();