EF Code First:Включить неработающие отношения

У меня есть конкретный запрос в моем коде, который должен быстро загрузить все связанные объекты (как ->1 FK, так и ->N FK)потому что контекст будет удален сразу после этого.

Я создал общий метод «Запрос», который принимает params Expression<Func<MyItem, object>>[] includesи затем объединяет их внутри цепочки. Эта часть работает нормально.

Запрос выглядит следующим образом.:

var item = facade.Query<MyItem>(
                c => c.Childs.Select(x => x.Parent),
                c => c.Childs.Select(x => x.SubChild1),
                c => c.Childs.Select(x => x.SubChildNotWorking),
                c => c.Childs.Select(x => x.SubChild2),
                c => c.Childs.Select(x => x.SubChild3),
                c => c.Childs.Select(x => x.SubChildrens)
                ).FirstOrDefault(c => c.Name == name);

Отображение неработающего свойства (, размещенного в конфигурации SubChildNotWorking.):

this.HasMany(scnw => scnw.Childs).WithOptional(c => c.SubChildNotWorking).HasForeignKey(c => c.MyForeignKey);

Из всех включений только SubChildNotWorkingфактически не работает. При проверке отладчиком возвращенного объекта я вижу прокси по всем свойствам. Открытие прокси дает мне правильные данные для всех других отношений и исключение «Контекст объекта уже удален» для свойства SubChildNotWorking.

Единственное отличие, которое я смог заметить, заключается в том, что SubChildNotWorking— это FK, допускающий значение NULL, (со столбцом, допускающим значение NULL, в БД и конфигурацией WithOptional в dbcontext), в то время как все остальные FK, не допускающие NULL, настроены с помощью WithRequired..

База данных также является устаревшей БД, созданной не с помощью Code First и не соответствующей ее соглашениям, я просто сделал сопоставления в DbContext. Все остальное работает нормально.

Я пытаюсь выяснить, не работает ли нетерпеливая загрузка на обнуляемых FK, но я не смог найти никакой документации по этому поводу.

Это ошибка или так задумано? Но самое главное, как мне это решить?

Спасибо.

9
задан Matteo Mosca 9 December 2012 в 12:22
поделиться