0

기본 키 (AccLinkID)와 외래 키 (aspnet_Users UserID)가있는 테이블이있는 경우 외래 키가 Linq를 사용하여 가리키는 개체를 어떻게 선택할 수 있습니까?외래 키를 통해 개체를 선택하는 방법

User myUser = _myDB.AccLinkSet.Where(user => user.LinkID == linkId).FirstOrDefault().aspnet_Users; 

작동하지 않았다 ...

사람이 어떤 아이디어가?

답변

1

이 시도 : 지금은

User myUser = _myDB.AccLinkSet.Include("aspnet_Users") 
    .Where(user => user.LinkID == linkId).FirstOrDefault().aspnet_Users; 
+1

+1 - 그렇기 때문에 Entity Framework는 참조 된 개체 집합을 자동으로로드하지 않습니다. 명시 적으로 .Load()를 사용하여 개체를로드하거나 쿼리 결과에이 .Include 메서드를 포함해야합니다. –

+1

위의 코드는 작동하지 않습니다. Include는 새로운 ObjectQuery를 반환합니다.이 ObjectQuery는 무시하고 (수집하도록 허용) 포함되지 않은 ObjectQuery를 사용합니다. Include와 Where는 * 같은 줄에 있어야합니다 *. –

+0

@Craig Stunz - 감사합니다. 답변이 업데이트되었습니다. –

0

, 엔티티 프레임 워크 1, 당신은 자동 지연 로딩을하지 않는, 예를 들어, 하나의 엔티티에서 다음 엔티티로 이동하려는 경우 해당 엔티티를 쿼리에 포함 시키려면 .Include("OtherEntity")을 선택하거나 엔티티를로드하기 위해 명시 적으로 .Load("OtherEntity")을 EntityContext에 호출해야합니다.

이것은 너무 위험하다고 생각하기 때문에 EF 팀이 자동화 된 지연로드를 지원하지 않도록 설계된 결정이었습니다. 사용자가 두 번째 엔티티 집합을 포함 /로드하고 있음을 명확하고 분명하게 나타내려고했습니다.

많은 인기를 얻고있는 EF v4 (2009 년 말까지 .NET 4.0과 함께 출시 예정)는 자동 지연된로드를 지원합니다 (사용하려는 경우).

context.ContextOptions.DeferredLoadingEnabled = true; 

그 새로운 기능에 대한 몇 가지 문서를 참조하십시오 : 당신은 기본적으로 해제 이후 명시 적으로 활성화해야

1

당신이해결할 수 있지만 다른 사람들이 말했듯이, Include를 사용하면 이것이 내가하는 방법이 아닙니다. 대신 프로젝트는 필요하지 않습니다. 포함 :

var q = from al in yDB.AccLinkSet 
     where al.LinkID == linkId 
     select al.aspnet_Users; 

이 경우 사용자가 자동으로로드됩니다.