C# 多个表之间的实体框架映射
我正在尝试获得4个表之间的正确映射 主表 类(Id、类名) 课程(Id,课程名称) 学生(Id,学生姓名) 关系表 ClassCourse(Id、ClassId、CourseId) ClassCourseStudent(ClassCourseId,StudentId) 类到课程有多对多映射。因此,我们使用关系表ClassCourse来存储关系 学生在课堂上有一对多的映射 所以我的问题是如何为学生和班级绘制地图 我的代码是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
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
对象连接到pClassCourse的主键
它看起来是右键,到底是什么问题?@jeroenvanevel在上一次映射中。它希望左键是CourseId,右键是StudentId。但是由于ClassCourseId是ClassCourse表的主键,它与CourseId不匹配,因此不会返回任何记录-(谢谢Jeroen,我也这么认为,改变设计以使其工作。再次感谢您的建议,复合键作为外键将不起作用。:-)