Entity Framework Core 多对多中的种子

6 c# entity-framework entity-framework-core .net-core asp.net-core

如何在 EF Core 中建立多对多关系,在这方面找不到任何东西?

所以这是实体

public class Student 
{
     public int Id { get; set; }
     public string Name { get; set; }

     public virtual List<StudentGrade> StudentGrades { get; set; }
}


public class Grade 
{
     public int Id { get; set; }
     public int Grade { get; set; }

     public virtual List<StudentGrade> StudentGrades { get; set; }
}


public class StudentGrade 
{
     public int GradeId { get; set; }
     public Grade Grade { get; set; }

     public int StudentId { get; set; }
     public Student Student { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

所以官方文档说你必须定义一个加入实体(在我的例子中是 StudentGrade),这应该在多对多关系中的实体中引用。 Ef 多对多的核心文档

现在在 EF 中,您不必这样做,它会弄清楚这些事情,因此您无需使用连接实体,只需将每个实体引用到另一个实体即可。

那么如何在 EF Core 中建立这种类型的关系呢?

谢谢

Ale*_*iev 5

所以对我有用的是DbContext::OnModelCreating(ModelBuilder modelBuilder)用类似的东西覆盖 :

protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
       modelBuilder.Entity<StudentGrade>()
                    .HasKey(s => new { s.GradeId , s.StudentId });
    var students= new[]
    {
     new Student{Id=1, Name="John"},
     new Student{Id=2, Name="Alex"},
     new Student{Id=3, Name="Tom"}
    }

    var grades = new[]
    {
     new Grade{Id=1, Grade=5},
     new Grade{Id=2, Grade=6}
    }

    var studentGrades = new[]
    {
     new StudentGrade{GradeId=1, StudentId=1},
     new StudentGrade{GradeId=2, StudentId=2},

     // Student 3 relates to grade 1 
     new StudentGrade{GradeId=1, StudentId=3}
    }

    modelBuilder.Entity<Student>().HasData(stdudents[0],students[1],students[2]);
    modelBuilder.Entity<Grade>().HasData(grades[0],grades[1]);
    modelBuilder.Entity<StudentGrade>().HasData(studentGrades[0],studentGrades[1],studentGrades[2]);

    base.OnModelCreating( modelBuilder );
}
Run Code Online (Sandbox Code Playgroud)