我的学生姓名和课程名称中有两张桌子。他们之间有很多关系。我如何吸取学习者的教训?以下是我写的实体。
public class Student
{
public Student()
{
Lessons = new HashSet<Lesson>();
}
public int ID { get; set; }
public int MaxCredit { get; set; }
public int MemberID { get; set; }
public virtual Member Member { get;
public virtual ICollection<Lesson> Lessons { get; set; }
}
public class Lesson
{
public Lesson()
{
Students = new HashSet<Student>();
}
public int ID { get; set; }
public string Name { get; set; }
public int LessonCredit { get; set; }
public virtual ICollection<Student> Students { get; set; }
}
我试图让学生上课:
uow.LessonRepository.GetALL().Where(x=> x.Students.Any(s=> s.MemberID==id))
但它给了我一个投射错误。
答案 0 :(得分:1)
您的EF模型是正确的,要做多对多的关系,双方都有virtual ICollection<T>
的其他类型。
您的查询不正确但是如果您想要获得学生的课程,解析它我们从LessonRepository
开始(可能是IEnumerable<Lesson>
),然后对其进行Where
过滤收集;到目前为止一直很好(从课程开始有点奇怪,但无论如何)。条件是(英文)有任何学生MemberId
匹配“id”(无论来自哪里)。不完全确定会给你什么,但它不是学生的课程。
由于您已经拥有导航属性,因此您只需访问给定学生对象的Lessons
属性即可。假设你开始使用学生ID:
Students.FirstOrDefault(s => s.Id == id)?.Lessons;
FirstOrDefault
搜索正确的学生项目,然后您只需访问Lessons
媒体资源。