我用代码优先绘制数据的多少个关系表?

时间:2016-12-16 22:25:02

标签: c# list ef-code-first

我的学生姓名和课程名称中有两张桌子。他们之间有很多关系。我如何吸取学习者的教训?以下是我写的实体。

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))

但它给了我一个投射错误。

1 个答案:

答案 0 :(得分:1)

您的EF模型是正确的,要做多对多的关系,双方都有virtual ICollection<T>的其他类型。

您的查询不正确但是如果您想要获得学生的课程,解析它我们从LessonRepository开始(可能是IEnumerable<Lesson>),然后对其进行Where过滤收集;到目前为止一直很好(从课程开始有点奇怪,但无论如何)。条件是(英文)有任何学生MemberId匹配“id”(无论来自哪里)。不完全确定会给你什么,但它不是学生的课程。

由于您已经拥有导航属性,因此您只需访问给定学生对象的Lessons属性即可。假设你开始使用学生ID:

Students.FirstOrDefault(s => s.Id == id)?.Lessons;

FirstOrDefault搜索正确的学生项目,然后您只需访问Lessons媒体资源。