我有3个实体:学生
public int Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual ICollection<Subject> Subjects { get; set; }
public virtual ICollection<Grade> Grades { get; set; }
学科
public int SubjectID { get; set; }
public string SubjectName { get; set; }
public virtual ICollection<Student> Students { get; set; }
public virtual ICollection<Grade> Grades { get; set; }
等级
public int GradeID { get; set; }
public string GradeName { get; set; }
public int GradeValue { get; set; }
学生和学科课程之间存在多对多关系,学生成绩和学生成绩之间存在一对多关系 .
学生成绩的原因:有一种情况,我想要所有成绩的学生,无论是否显示主题 . 对于学科成绩:并非每个科目使用相同的比例,例如一个科目使用1-10比例,另一个使用1-100比例 .
我想要展示的是:例如,所有student1的数学课程成绩 .
我在想我应该先为用户获得所有成绩,然后过滤我想要的课程 . 或者我应该加入所有表格,然后筛选StudentID和SubjectID?
所以我的终极问题是,如何进行此查询?
1 回答
首先,调整您的成绩课程 . 成绩取决于学生和主题之间的交集 . 即
EF将生成密钥,因为您具有导航路径,但依赖于推断的密钥而不是显式密钥,如果默认行为发生更改(通常情况下),则易于破坏 . 此外,您可以控制键的命名 .
至于查询,您可以使用:
您可能知道,M-M连接需要一个“连接”表 . 在此示例中,您可以使用Grades作为M-M连接表 . 所以我也会删除学生和主题之间的导航属性 . 它可以通过目标表和您使用的查询来实现 . 反向查询( class 中的学生):