EF 4.1 загрузка отфильтрованных дочерних коллекций не работает для многих-ко-многим

Я изучал Применение фильтров при явной загрузке связанных сущностей и не мог заставить его работать для отношения «многие-ко-многим».

Я создал простой модель: Model

Краткое описание:
Студент может пройти множество Курсов , а Курс может иметь много студентов .
Студент может сделать много презентаций , но презентация может быть сделан только одним студентом .
Итак, у нас есть отношения «многие ко многим» между Студентами и Курсы , а также отношения «один ко многим» между Студентом и ] Презентации .

Я также добавил один Студент , один Курс и одну Презентацию , связанных друг с другом.

Вот. код, который я использую:

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: After loading presentations. Однако после того, как я проделал то же самое с Курсами , ничего не изменилось: After attempting to load courses

Я пытаюсь загрузить курсы, не вызывая Query , и он работает должным образом: Courses loaded

(Я удалил предложение Where , чтобы еще больше подчеркнуть суть - последние две попытки загрузки отличаются только вызовом «Query ()»)

Теперь единственное различие, которое я вижу, заключается в том, что отношение «один ко многим», а другое - «многие ко многим». Это ошибка EF или я что-то упустил?

И, кстати, я проверил вызовы SQL для последних двух попыток загрузки курса , и они на 100% идентичны, так что кажется, что это EF, который не может заполнить коллекцию.

13
задан Yakimych 26 May 2011 в 16:40
поделиться