私は次のモデルを持っています(この質問のために唖然としました):
public class Student
{
public int ID { get; set; }
public virtual ICollection<StudentCourse> StudentCourses { get; set; }
public Student(){
StudentCourses = new List<StudentCourse>();
}
}
public class StudentCourse
{
public int ID { get; set; }
public string Grade { get; set; }
public int StudentID { get; set; }
public int CourseID { get; set; }
public virtual Student Student { get; set; }
public virtual Course Course { get; set; }
}
public class Course
{
public int ID { get; set; }
public virtual ICollection<StudentCourse> StudentCourses { get; set; }
public Course() {
StudentCourses = new List<StudentCourse>();
}
}
すべてが私のDbContextクラスにリンクされており、期待どおりに機能しています。コースに参加したすべての学生を見つけたいので、次のようにします。
var query = db.Students
.Where(s => s.StudentCourses.Course.ID == 11);
しかし、何らかの理由でEFがStudentCourseとCourseの間のリンクを認識できないため、失敗します。エラーメッセージは次のとおりです。
'System.Collections.Generic.ICollection'には'Course'の定義が含まれておらず、タイプ'System.Collections.Generic.ICollection'の最初の引数を受け入れる拡張メソッド'Course'が見つかりませんでした(usingディレクティブがありませんか?またはアセンブリリファレンス?)。
ただし、以下は正常に機能します。
var query = db.StudentCourses
.Where(s => s.Course.ID == 11)
.Select(s=>s.Students);
これはバグですか、それとも私は何か間違ったことをしていますか?