Seed в Entity Framework Core «многие ко многим» - PullRequest
0 голосов
/ 28 сентября 2018

как можно создать в 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; }
}

, поэтому официальныйДокументация говорит, что вы должны определить объединяющуюся сущность (в моем случае StudentGrade), и на нее следует ссылаться в сущностях, которые находятся в отношении многих ко многим. Ef основная документация для многих ко многим .

Теперь в EF вам не нужно будет этого делать, он будет разбираться в этих вещах, и поэтому вместо того, чтобы иметьсущность, вы просто будете ссылаться на каждую сущность в другую.

Итак, как вы можете создать такой тип отношений в EF Core?

Спасибо

1 Ответ

0 голосов
/ 02 ноября 2018

Так что у меня получилось переопределить 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 Grad{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 );
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...