fields 테이블과의 접합점이있는 many to many 관계에 대한 LINQ to Entities 쿼리 수행 방법을 찾으려고합니다.EF LINQ를 Many to Many 관계에 대한 Entites 쿼리
다음은 도메인 모델입니다 (View 모델을 사용하고 있지만이 예제에서는 간단하게 유지하고 있습니다).
Student Domain model
StudentID (PK)
ICollection<StudentCourse> StudentCourses
StudentCourse Domain model
StudentCourseID (PK)
StudentID (FK)
CourseID (FK)
ForAdult
ForSeniour
Description
Course Domain model
CourseID (PK)
ICollection<StudentCourse> StudentCourses
참고
- 접합 테이블 (즉 StudentCourse)은 두 개의 외부 키 이외의 다른 필드를 포함하기 때문에,이 EF 용 엔티티를 생성한다.
나는이 게으른 로딩을 위해 일하고있어
게으른로드. 네비게이션 속성은 'virtual'키워드로 선언되었습니다.
검색어 방법 - 작동합니다!
var student = (from s in context.Students
where s.StudentID == id
select s).SingleOrDefault<Student>()
방법 방식 - 작동합니다!
Student student = context.Students.Find(id);
프로젝션
하지만, 나는 성능상의 이유로, 데이터베이스에 즉 적은 여행을위한 투사로이 작업을 수행하는 것을 선호합니다.
(1 또는) 많은 StudentCourses와 1 명의 학생을 반환하는 LINQ to Entities 쿼리를 작성하는 방법에 정말로 집착하고 있습니다.
내가 무슨 뜻인지 안다면 엔티티가 어떻게 형성되어야하는지 완전히 이해하지 못합니다. 예를 들어 는, 나는 시도했다 :
이var myvar = from s in context.Students
from sc in s.StudentCourses
where s.StudentID == id
select s
내가 필요로하는 것은보기에 다음, 다음보기 모델에 학생에 할당되고 전달 될 수 StudentCourses의 수집과 학생의 엔티티를 반환하는 것입니다 .
이 문제를 해결하기 위해 많은 시간을 할애 해 주셔서 정말 감사하겠습니다.
사이드 노트로, 나는 SingleOrDefault() 메소드를 사용하여 var (IQueryable 내 생각)의 결과를 Student로 캐스팅합니다. 이것을 캐스팅하는 것이 가장 좋은 방법입니까?
매우 효과적입니다. 성능상의 이유로 열을 제한하고 행을 필터링합니다. 즉, 데이터베이스에서 반환 된 결과 집합을 줄이므로 쿼리 투영이 필요합니다. –
Eager 로딩을 배우는 다른 사용자를 위해 중첩 된 포함을 수행 할 수도 있습니다. 위의 예에서 StudentCourses의 탐색 속성 인 SubCourse Domain 모드도 포함시켜 봅니다 (Course Domain 모델과 물리적으로 연결되거나 연결되지 않을 수도 있음). 다음은 하나의 Student, 하나 또는 여러 개의 StudentCourse (s), 하나 또는 여러 개의 Course (s), 하나 또는 여러 SubCourse (s)의 코드 스 니펫입니다.'var student = .StudentID == id select s). 포함 ("StudentCourses.Course"). 포함 ("StudentCourses.SubCourse"). FirstOrDefault();' –