在实体框架中配置多对多的关系

时间:2014-06-02 07:36:28

标签: entity-framework

所以请遵循以下示例:

http://www.entityframeworktutorial.net/code-first/configure-many-to-many-relationship-in-code-first.aspx

我有一个学生班:

public class Student
    {
        public Student() { }

        public int StudentId { get; set; }

        public string StudentName { get; set; }

        public virtual ICollection<Course> Courses { get; set; }
    }

和课程课程

public class Course
    {
        public Course()
        {
            this.Students = new HashSet<Student>();
        }

        public int CourseId { get; set; }
        public string CourseName { get; set; }

        public virtual ICollection<Student> Students { get; set; }
    }

他们有多对多的关系,这种配置是这样的:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {

       modelBuilder.Entity<Student>().HasMany<Course>(s => s.Courses).WithMany(c => c.Students).Map(c =>
        {
            c.MapLeftKey("Student_id");
            c.MapRightKey("Course_id");
            c.ToTable("StudentAndCourse");
        });

        base.OnModelCreating(modelBuilder);
    }

我自己创建了模型和表格并映射到它们。到现在为止还挺好。问题是我不需要收集相关学生到我的课程。换句话说,当我上课时,他们会和相关的学生一起来。我需要有指定课程的学生,但是当我通过我的回购获得课程时,我只需要它们。

我尝试从Course类中删除Students集合,但是可以修复映射。我对EF没有经验,对工作实例的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

WithMany()方法,不需要相关实体的导航属性:

 modelBuilder.Entity<Student>()
       .HasMany(s => s.Courses)
       .WithMany()
       .Map(c =>
    {
        c.MapLeftKey("Student_id");
        c.MapRightKey("Course_id");
        c.ToTable("StudentAndCourse");
    });