这是我简单的ERD
对于给定的学校,我想加载所有的课堂+相关学生+相关科目。
var schoolclasses = context.Schoolclasses
.Include(s => s.Pupils)
// How to get here the SubjectPupil + Subject for each pupil?
.Where(s => s.SchoolyearId == schoolyearId);
这个ERD中唯一特别的东西是与学生和主题的多对多关系。
在EF7中,我为它创建了一个桥接表,如SubjectPupil。
如何在上面的查询中扩展我的查询或正确执行以获取每个学生的主题数据?
答案 0 :(得分:1)
对于所有的贬低者和更近的白痴没有评论。
从这个SO回答中我发现Intellisense没有正确显示.ThenInclude()。因此我认为查询不起作用:
EF7 nested Include not showing in Razor .net
获取我想要的数据的解决方案就是这个。
var schoolclasses = await context.Schoolclasses
.Include(x => x.Pupils)
.ThenInclude(x => x.PupilsSubjects)
.ThenInclude(x => x.Subject)
.Where(s => s.SchoolyearId == schoolyearId)
.ToListAsync();
只需键入属性的名称为ThenInclude并构建项目,它就会编译!
答案 1 :(得分:0)
很难说没有看到类代码,但如果从本质上讲你的问题是你如何从多个级别加载相关的entiites,你可以这样做:
var schoolclasses = context.Schoolclasses
.Include(s => s.Pupils.Select(pupil => pupil.SubjectPupil.Subject))
.Where(s => s.SchoolyearId == schoolyearId);
Here's the MSDN article描述了这种行为。