2012-04-02 2 views
0

엔티티 프레임 워크 (EF4)에서 외래 키에 관한 질문이 있습니다.Entity Framework를 사용하여 중첩 된 외래 키 특성을 얻는 방법

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 
{ 
} 

을 각각 그리고 내가 (내부 E2를 호출) E3의 객체를 통해 호출하여 class E4에서 class E1의 속성에 액세스한다고 가정뿐만 아니라 E2E1 전화 :

내가 수업을 말할 수 있습니다 위에 표시된 있지만 E1의 특성에 액세스하려고하면 의 특성을 얻으려면 가능한 방법을 뭐라구? object null reference 예외가 발생합니다?

답변

1

관계로드를 강제 실행하려면 eager로드, 지연로드 또는 명시 적로드 중 하나를 사용해야합니다.

열망로드는 주요 엔티티를로드 할 때 즉시 관계를로드합니다 :

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(); 
관련 문제