Я только начинаю с EF7 (CORE) и изо всех сил стараюсь найти правильную реализацию следующих. Скажем, у меня есть таблица с несколькими дочерними таблицами, которые, в свою очередь, имеют таблицы внуков (и в свою очередь они имеют таблицы внешнего ключа). Если бы я хотел доступ ко всему, что мне нужно что-то вроде этогоEntity Framework 7 несколько уровней дочерних таблиц
TABLE_A.Include(c => c.TABLE_B).ThenInclude(co => co.TABLE_C)
.ThenInclude(coi => coi.TABLE_D)
.ThenInclude(coia => coia.TABLE_E)
.Include(c => c.TABLE_B).ThenInclude(co => co.TABLE_F)
.ThenInclude(coa => coa.TABLE_G)
.ThenInclude(coaAcc => coaAcc.TABLE_H)
.ThenInclude(coaAccInt => coaAccInt.TABLE_D)
.ThenInclude(coaAccIntAgent => coaAccIntAgent.TABLE_E)
Теперь я понимаю необходимость заковава включает включить все мои дочерние таблицы ... но я смотрю на SQL он выстреливает за кулисами и его отключение 11 SQL-операторов. Это кажется ужасно неэффективным.
Это лучший способ сделать это? Теперь у меня появилось новое требование добавить еще 3 дочерних таблицы в TABLE_B ... так что мне понадобится больше возможностей ... и, следовательно, больше вариантов будет выполняться за кулисами.
Я понимаю логику того, что я делаю ... и понимают, что в EF7 в настоящее время не поддерживается ленивая загрузка, но это не очень эффективный способ делать вещи, когда я могу написать хранимую процедуру, которая делает это за один раз.
Есть ли лучшие практики для таких вещей, как это или что-то, что я не понимаю, как использовать EF7, чтобы делать то, что мне нужно?
Любая помощь или руководство будут высоко оценены!
Благодаря
Как это работает для коллекций? TABLE_A - это коллекция ... и каждый объект имеет список TABLE_B. Если я должен был использовать '_context.Entry (<Список таблицы А>) нагрузки (б => б.);.' я получаю ошибку 'IQueryable ' не содержит определение для «TABLE_B 'и никакой метод расширения' TABLE_B ', принимающий первый аргумент типа' IQueryable ', не может быть найден –
rborob
_context.Entry получить только один объект, вы загружаете сначала весь список TABLE_A и всякий раз, когда это необходимо для каждого элемента в списке TABLE_A, используйте этот код ex : var item = TABLE_A.First(); context.Entry (item) .Load (b => b.TABLE_B); <Фактически, на самом деле, похоже на LazyLoadining, но явная нагрузка навигации –
Wow это ужасное решение. Если я отображу 300 элементов в представлении и покажу данные из 10 таблиц FK, я бы эффективно выполнил 3000 запросов за кулисами. – rborob