[英]Entity Framework mapping between multiple tables
我正在尝试获取4个表之间的正确映射。
MainTables
类(Id,ClassName)
课程(编号,课程名称)
学生(编号,学生姓名)
关系表
ClassCourse(Id,ClassId,CourseId)
ClassCourseStudent(ClassCourseId,StudentId)
课程到课程具有多对多映射。 因此,我们使用关系表ClassCourse来存储关系
学生使用ClassCourse进行一对多映射。
所以我的问题是我该如何为Student和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")
最后一个映射是我正在寻找的映射。
提前致谢。
我认为您必须重新设计。 现在,您正在尝试将复合键指定为外键,但无法完成。
我要做的是创建一个单独的模型,该模型简单地存储课程与课程的组合,并提供单个参考键。 这将产生一个额外的表,但允许您执行所需的操作。
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
对象连接到ClassCourse
的主键上。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.