代码中的多对多关系问题首先是c#

时间:2014-02-27 11:27:38

标签: c# ef-code-first

我首先使用实体​​框架代码在我的项目中创建数据库。我在以下两个表之间定义了多对多的关系。:

  1. 学生
  2. 流利的Api

    modelBuilder.Entity<Student>().HasMany(e => e.Courses)
                .WithMany(e => e.Students).Map(m =>
                 {
                    m.MapLeftKey("StudentId");
                    m.MapRightKey("CourseId");
                    m.ToTable("StudentCourse");
                 });
    

    这将在学生课程之间定义多对多关系,并将创建一个新表 StudentCourse 在数据库中。

    现在我想在

    之间定义一个新关系(可能是 1对1 1对多
    1. StudentCource
    2. 任何其他表格
    3. 我如何首先使用实体​​框架代码?

1 个答案:

答案 0 :(得分:0)

如果没有为StudentCourse创建自己的课程(poco),你想要什么是不可能的

public class StudentCourse
{
    public int Id {get;set;}
    public Student Student {get; set;}
    public Course Course {get; set;}

}

然后使用流畅的api来建立这三个变量之间的关系

modelBuilder.Entity<StudentCourse>()
    .HasRequired(i => i.Student)
    .WithMany(u => u.StudentCourses)
    .HasForeignKey(i => i.StudentId)
    .WillCascadeOnDelete(false);

modelBuilder.Entity<StudentCourse>()
    .HasRequired(i =>i.Course)
    .WithMany(d =>d.StudentCourses)
    .HasForeignKey(i => i.CourseId)
    .WillCascadeOnDelete(false);

StudentCourses是学生班级和课程班级中的导航属性

您可以使用定义为主键的Id或使用两个表的外键作为主键:

modelBuilder.Entity<StudentCourse>()
    .HasKey(i => new {i.StudentId,i.CourseId });

在我看来,使用Id作为主键可以让您更轻松地在StudentCourse和另一个表之间建立关系。