Как я могу отобразить разные экземпляры объекта сущности в одну и ту же строку в таблицу данных с использованием Entity Framework Core?
Другими словами, как Entity Framework Core сравнивает сущности, которые еще не вставлены в базу данных (в противном случае я предполагаю, что нужно только сравнить первичный ключ) и выясняет, что два объекта должны быть сопоставлены одному юридическое лицо? Сравнивает ли он ссылки на экземпляры? Или вызвать оператор равенства по умолчанию?
Подводя итог моей проблеме, давайте представим, что у меня есть школа, в которой есть ученики и учителя, и что я хочу, чтобы для каждого имени учителя была создана одна строка данных, но я не могу повторно использовать один и тот же экземпляр учителя, как я могу сказать EF: сделай это?
public class Student
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public Teacher Teacher { get; set; }
}
public class Teacher
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
}
public class SchoolContext : DbContext
{
public DbSet<Teacher> Teachers { get; set; }
public DbSet<Student> Students { get; set; }
}
public class SchoolGenerator
{
public static void CreateASchool(SchoolContext context)
{
List<Student> students = new List<Student>()
{
new Student(){Name = "Student 1", Teacher = new Teacher(){Name = "Teacher 1"}},
new Student(){Name = "Student 2", Teacher = new Teacher(){Name = "Teacher 1"}}, // I cannot re-use the previous instance of Teacher 1 for this student
new Student(){Name = "Student 3", Teacher = new Teacher(){Name = "Teacher 2"}},
new Student(){Name = "Student 4", Teacher = new Teacher(){Name = "Teacher 2"}},
};
context.Students.AddRange(students);
context.SaveChanges(); // I want to create only TWO teacher rows, one by name, and FOUR student rows
}
}