를 사용할 때 사용 가능한 첫 번째 항목을 가져 외래 키는 (은 아니지만) LINQ
var s = db.sModels.ToList().First(r => r.Status == CustomStatus.Available);을 사용하고 null입니다.
그러나 가져온 경우 s
의 외래 키는 null
으로 나타납니다.
데이터베이스에 연결하여 외래 키가 null
(하지만 1
)이 아닌 것을 확인했습니다.
왜 null
이됩니까?
를 사용할 때 사용 가능한 첫 번째 항목을 가져 외래 키는 (은 아니지만) LINQ
var s = db.sModels.ToList().First(r => r.Status == CustomStatus.Available);을 사용하고 null입니다.
그러나 가져온 경우 s
의 외래 키는 null
으로 나타납니다.
데이터베이스에 연결하여 외래 키가 null
(하지만 1
)이 아닌 것을 확인했습니다.
왜 null
이됩니까?
이 엔티티에 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);
Magical! 외래 키가 기본적으로 'null'인 이유를 더 설명해 주시겠습니까? –
내가 생각하는 EF 팀의 설계 결정. 또한 EF 5는 열거 형에 대한 지원을 제공하므로 ToList()로 해결 방법을 필요로하지 않아야합니다. 이는 성능 드래그가 될 것입니다. 그때까지는 * 모든 결과를 구체화하는 대신 DB에 정수 값을 사용할 것입니다. – BrokenGlass
왜 'First'앞에'.ToList() '를 호출할까요? 그것은 아마도 당신의 문제의 근원은 아니지만 그것은 낭비적인 노력입니다. –
@Tim S. 그렇지 않으면 지원되지 않는 예외가 발생합니다. (지정된 유형 멤버 'Status'는 LINQ to Entities에서 지원되지 않으며 이니셜 라이저, 엔터티 멤버 및 엔터티 탐색 속성 만 지원됩니다.) –