Entity Framework Базовая реализация «многие ко многим» - PullRequest
0 голосов
/ 26 сентября 2019

Так что многие-ко-многим не попали в выпуск .NET Core 3.0, облом ...

Я знаю, как реализовать m: m с помощью сущности соединения, как в этом примере:https://stackoverflow.com/a/53972658/980917

Мой вопрос касается самих модельных классов.Рассмотрим пример Student & Class:

Student - has ICollection<StudentClass> 

StudentClass - joining entity

Class - has ICollection<StudentClass> 

Это хорошо для целей загрузки данных.Но в вашей бизнес-логике коллекция StudentClasses бесполезна, так как это просто объединяющая сущность с двумя идентификаторами.При работе с Student или Class вам действительно нужна фактическая коллекция Classes внутри Student и коллекция студентов внутри Класс .(т. е. Student.Classes & Class.Students .

Каков текущий рекомендуемый подход / обходной путь для извлечения коллекций "многие ко многим" (без объединения сущностей)?

Нужно ли делать второй выбор, основанный на присоединяющейся сущности, или есть что-то более элегантное?

Был бы хороший пример или ссылка. Спасибо.

1 Ответ

1 голос
/ 27 сентября 2019

Каков текущий рекомендуемый подход / обходной путь для извлечения коллекций «многие ко многим» (без объединения сущностей)?

С помощью метода расширения .Include можно легко сделать следующее:

Допустим, ваш класс Student выглядит следующим образом:

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

  public ICollection<StudentClass> StudentClasses {get; set;}
}

Чтобы найти всех учащихся с соответствующими классами:

var studentsWithClasses = _context.Students.Include(s => s.StudentClasses).ToList();

Чтобы найти одного ученика сего классы:

var studentWithClasses = _context.Students.Where(s => s.Id = studentId).Include(s => s.StudentClasses).FirstOrDefault();
...