1

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

主表

类(ID,类名)

课程(ID,课程名称)

学生(ID,学生姓名)

关系表

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")

最后一个映射是我正在寻找的映射。

提前致谢。

4

1 回答 1

2

我认为你必须重新审视你的设计。现在您正在尝试将复合键分配为外键,这是无法完成的。

我要做的是创建一个单独的模型,它只存储课程-班级组合并提供一个参考键。这将导致一个额外的表,但允许你做你想做的事。

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.

于 2013-11-13T22:11:52.773 回答