У меня есть конкретный запрос в моем коде, который должен быстро загрузить все связанные объекты (как ->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, но я не смог найти никакой документации по этому поводу.
Это ошибка или так задумано? Но самое главное, как мне это решить?
Спасибо.