У меня есть конкретный запрос в моем коде, который должен стремиться загружать все связанные объекты (оба -> 1 FKs и -> N FK), потому что контекст будет удален сразу после этого ,EF Code First: Включить не работает на необязательные отношения
Я сделал общий метод «Запрос», который принимает 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
Безразлично» t действительно работает. При проверке с отладчиком возвращаемого объекта я вижу прокси-серверы во всех свойствах. Открытие прокси дает мне правильные данные для всех других отношений, а «Объектконтекст уже был исключен» для свойства SubChildNotWorking
.
Единственная разница, которую я смог определить, заключается в том, что SubChildNotWorking
является NULL-кодом FK (с нулевым столбцом в базе данных DB и WithOptional в dbcontext), а все остальные - с недействительными FK, настроенными с помощью WithRequired.
База данных также является устаревшей БД, не созданной с использованием кода First и не выполняющей ее соглашения, я просто сделал сопоставления в DbContext. Все остальное отлично работает.
Я пытаюсь выяснить, не работает ли загруженная загрузка с нулевыми FK, но я не могу найти документацию об этом.
Это ошибка или предполагаемое поведение? Но, прежде всего, как я могу это решить?
Спасибо.
Что произойдет, если вы включите только 'SubChildNotWorking' без других subchildren? Так ли это работает? – Slauma
Нет. Не работает. –
Вы можете проверить, правильно ли выглядит SQL (с помощью 'var sql = facade.Query (c => c.Childs.Select (x => x.SubChildNotWorking)). ToString();') и проверить запрос вручную в SSMS, если он возвращает ожидаемые строки результатов. –
Slauma