Я изучал Применение фильтров при явной загрузке связанных сущностей и не мог заставить его работать для отношения «многие-ко-многим».
Я создал простой модель:
Краткое описание: Студент
может пройти множество Курсов
, а Курс
может иметь много студентов
. Студент
может сделать много презентаций
, но презентация
может быть сделан только одним студентом
.
Итак, у нас есть отношения «многие ко многим» между Студентами
и Курсы
, а также отношения «один ко многим» между Студентом
и ] Презентации
.
Я также добавил один Студент
, один Курс
и одну Презентацию
, связанных друг с другом.
Вот. код, который я использую:
class Program
{
static void Main()
{
using (var context = new SportsModelContainer())
{
context.Configuration.LazyLoadingEnabled = false;
context.Configuration.ProxyCreationEnabled = false;
Student student = context.Students.Find(1);
context.
Entry(student).
Collection(s => s.Presentations).
Query().
Where(p => p.Id == 1).
Load();
context.
Entry(student).
Collection(s => s.Courses).
Query().
Where(c => c.Id == 1).
Load();
// Trying to run Load without calling Query() first
context.Entry(student).Collection(s => s.Courses).Load();
}
}
}
После загрузки презентаций я вижу, что счетчик для Presentations
изменился с 0 на 1: . Однако после того, как я проделал то же самое с Курсами
, ничего не изменилось:
Я пытаюсь загрузить курсы, не вызывая Query
, и он работает должным образом:
(Я удалил предложение Where
, чтобы еще больше подчеркнуть суть - последние две попытки загрузки отличаются только вызовом «Query ()»)
Теперь единственное различие, которое я вижу, заключается в том, что отношение «один ко многим», а другое - «многие ко многим». Это ошибка EF или я что-то упустил?
И, кстати, я проверил вызовы SQL для последних двух попыток загрузки курса
, и они на 100% идентичны, так что кажется, что это EF, который не может заполнить коллекцию.