C# 多个表之间的实体框架映射

C# 多个表之间的实体框架映射,c#,entity-framework,mapping,C#,Entity Framework,Mapping,我正在尝试获得4个表之间的正确映射 主表 类(Id、类名) 课程(Id,课程名称) 学生(Id,学生姓名) 关系表 ClassCourse(Id、ClassId、CourseId) ClassCourseStudent(ClassCourseId,StudentId) 类到课程有多对多映射。因此,我们使用关系表ClassCourse来存储关系 学生在课堂上有一对多的映射 所以我的问题是如何为学生和班级绘制地图 我的代码是 public class Class ( public int I

我正在尝试获得4个表之间的正确映射

主表

类(Id、类名)

课程(Id,课程名称)

学生(Id,学生姓名)

关系表

ClassCourse(Id、ClassId、CourseId)

ClassCourseStudent(ClassCourseId,StudentId)

类到课程有多对多映射。因此,我们使用关系表ClassCourse来存储关系

学生在课堂上有一对多的映射

所以我的问题是如何为学生和班级绘制地图

我的代码是

public class Class
(
    public int Id {get;set;}
    public string ClassName {get;set;}
    public virtual ICollection<Course> Courses {get;set;}
)

public class Course
(
   public int Id {get;set;}
   public string CourseName {get;set;}
   public virtual ICollection<Student> Students {get;set;}
)

public class Student
(
  public int Id {get;set;}
  public string StudentName {get;set;}
)
modelBuilder.Entity<Class>().ToTable("Class");
modelBuilder.Entity<Course>().ToTable("Course");
modelBuilder.Entity<Student>().ToTable("Student");

modelBuilder.Entity<Class>().HasMany(c => c.Courses).WithMany().Map(m => m.ToTable("ClassCourse") 
m.MapLeftKey("ClassId")
m.MapRightKey("CourseId")
)

modelBuilder.Entity<Course>().HasMany(c => c.Students).WithMany().Map(m =>               
 m.ToTable("ClassCourseStudent") 
 m.MapLeftKey("ClassCourseId")
 m.MapRightKey("StudentId")
公共类
(
公共int Id{get;set;}
公共字符串类名{get;set;}
公共虚拟ICollection课程{get;set;}
)
公共课
(
公共int Id{get;set;}
公共字符串CourseName{get;set;}
公共虚拟ICollection学生{get;set;}
)
公立班学生
(
公共int Id{get;set;}
公共字符串StudentName{get;set;}
)
modelBuilder.Entity().ToTable(“类”);
modelBuilder.Entity().ToTable(“课程”);
modelBuilder.Entity().ToTable(“学生”);
modelBuilder.Entity().HasMany(c=>c.Courses)。WithMany().Map(m=>m.ToTable(“classcourses”)
m、 MapLeftKey(“ClassId”)
m、 MapRightKey(“CourseId”)
)
modelBuilder.Entity().HasMany(c=>c.Students).WithMany().Map(m=>
m、 ToTable(“ClassCourseStudent”)
m、 MapLeftKey(“ClassCourseId”)
m、 MapRightKey(“学生ID”)
最后一个映射是我正在寻找的映射


提前感谢。

我认为您必须重新审视您的设计。现在您正试图将复合键指定为外键,但这是无法完成的

我要做的是创建一个单独的模型,它只存储课程类组合并提供一个参考键。这将产生一个额外的表,但允许您做您想做的事情

class Student {
 public int StudentId {get; set;}
}

class Class {
 public int ClassId {get; set;}
}

class Course {
 public int CourseId {get; set;}
}

class ClassCourse {
 public int ClassCourseId {get; set;}
 public int ClassId {get; set;}
 public int CourseId {get; set;}
}

现在,每个类都应该有一个
ClassCourse
对象列表,而不是
Course
,每个
Course
都应该有一个
ClassCourse
对象列表。现在它们没有直接链接在一起,但仍然通过中间对象连接,您可以将
Student
对象连接到p
ClassCourse的主键

它看起来是右键,到底是什么问题?@jeroenvanevel在上一次映射中。它希望左键是CourseId,右键是StudentId。但是由于ClassCourseId是ClassCourse表的主键,它与CourseId不匹配,因此不会返回任何记录-(谢谢Jeroen,我也这么认为,改变设计以使其工作。再次感谢您的建议,复合键作为外键将不起作用。:-)