Много ко многим в ядре EF - PullRequest
0 голосов
/ 27 июня 2019

У меня есть следующие модели

public class Student
    {
       public int Id {get; set; }
       public string Name {get; set; }
       public ICollection<StudentToCourse> StudentToCourse {get; set; }
    }
    public class StudentToCourse
    {
       public int StudentId{get; set; }
       public Student Student {get; set; }
       public int CourseId{get; set; }
       public Course Course {get; set; }
    }
    public class Course
    {
       public int Id {get; set; }
       public string Name {get; set; }
       public ICollection<StudentToCourse> StudentToCourse {get; set; }
    }

Я хочу получить список всех КУРСОВ для каждого студента, как мне это сделать?

1 Ответ

0 голосов
/ 27 июня 2019

Краткий ответ: ВЫБЕРИТЕ и сопоставьте значения Id.Или программно -

foreach(Student s in yourstudentList)
{
    foreach(StudentToCourse stc in s.StudentToCourse)
    {
        if(stc.StudentId = s.Id)
            //this is one you want, do something with it
    }
}

Лучший ответ:

Сначала давайте посмотрим на вашу модель ...

Представьте базовую структуру базы данных.

Ваша серединаТаблица называется поиском.
Вам не нужен ни весь Студент, ни весь объект Курса в нем.Кроме того, вашему объекту курса не нужно знать ни об одном из других объектов.

Если вы можете представить три таблицы в своей базе данных, вы сможете увидеть, как вы будете логически подключать студента к курсу через три таблицы.

Ваша модель все еще неполная.Внутри вашего приложения вам все еще нужен контейнер, в данном случае - List Course ID.Таким образом, вашему ученику не нужно заботиться обо всех записях в справочной таблице ученика / курса, только те, которые применимы к конкретному ученику.И у вас есть легкодоступный объект для извлечения данных или отправки обновлений в базу данных.

При первоначальном заполнении коллекции courseIds вы должны сделать SELECT FROM StudentToCourse where StudentId = x

Затем вы можете ПРИСОЕДИНИТЬСЯв вашей таблице курсов, чтобы получить такие значения, как название курса.Если вы обнаружите, что вам нужно выполнить множество таких поисков, вы можете кэшировать свой список курсов и снизить трафик базы данных за счет некоторой оперативной памяти.

Каждый раз, когда вы создаете нового студента, вы хотите заполнить его список идентификаторов курсов, а при фиксации студента в базе данных вы сохраняете свою справочную таблицу.

Это сохраняет ваши объекты каккак можно легче, поддерживая их отношения.

Существуют различные способы написать инструкцию SELECT в вашей среде разработки, найти их и найти тот, который вам нравится (или соответствует текущим практикам вашей компании) и привыкнуть к последовательномуиспользуя тот же.Это сделает ваш код более читабельным и управляемым.

...