繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM