2012-03-18 2 views
0

를 사용할 때 사용 가능한 첫 번째 항목을 가져 외래 키는 (은 아니지만) LINQ

 
var s = db.sModels.ToList().First(r => r.Status == CustomStatus.Available); 

을 사용하고 null입니다.

그러나 가져온 경우 s의 외래 키는 null으로 나타납니다.

데이터베이스에 연결하여 외래 키가 null (하지만 1)이 아닌 것을 확인했습니다.

null이됩니까?

+1

왜 'First'앞에'.ToList() '를 호출할까요? 그것은 아마도 당신의 문제의 근원은 아니지만 그것은 낭비적인 노력입니다. –

+0

@Tim S. 그렇지 않으면 지원되지 않는 예외가 발생합니다. (지정된 유형 멤버 'Status'는 LINQ to Entities에서 지원되지 않으며 이니셜 라이저, 엔터티 멤버 및 엔터티 탐색 속성 만 지원됩니다.) –

답변

4

이 엔티티에 Linq에이다 가정 - 그 기본 동작입니다 - 당신이 관련 엔티티를 실현하려면 -의 당신이 FK와 엔티티가 채워집니다 경우에 Include 쿼리를 사용할 수 있습니다 SomeEntity 가정 해 봅시다 :

var s = db.sModels.Include(r=> r.SomeEntity) 
        .First(r => r.Status == CustomStatus.Available); 
을 해결 방법에 대한

/그냥 FKS이 블로그 게시물을 참조 검색 쿼리를 포함하여 오 w : 지금 그러므로 위의 열거를하고자 실제로하지 지원하지 않는 엔티티에 대한 질문 Linq에에 코멘트에서 언급 한 바와 같이 "Getting Foreign Key Values with Linq-to-Entities"

있는 그대로 일한다. (EF 5까지) 해결 방법으로 DB에 정수를 사용할 수 있습니다 :

int statusAvailable = (int) CustomStatus.Available; 
var s = db.sModels.Include(r=> r.SomeEntity) 
        .First(r => r.Status == statusAvailable); 
+0

Magical! 외래 키가 기본적으로 'null'인 이유를 더 설명해 주시겠습니까? –

+1

내가 생각하는 EF 팀의 설계 결정. 또한 EF 5는 열거 형에 대한 지원을 제공하므로 ToList()로 해결 방법을 필요로하지 않아야합니다. 이는 성능 드래그가 될 것입니다. 그때까지는 * 모든 결과를 구체화하는 대신 DB에 정수 값을 사용할 것입니다. – BrokenGlass

관련 문제