Рассмотрим следующие сущности модели:Явная загрузка нескольких ссылок/коллекций на сущности
public class Parent
{
public virtual FirstChild FirstChild { get; set; }
public virtual SecondChild SecondChild { get; set; }
}
В моем коде, я загрузил Parent
объект:
Parent parent = <loaded in some way>;
явно загружать свои навигационные свойства, я использую
db.Entry(parent).Reference(p => p.FirstChild).Load();
db.Entry(parent).Reference(p => p.SecondChild).Load();
Но это приводит к двум запросам БД.
Вопрос: существует ли более элегантный способ, позволяющий явно загружать более одного навигационного свойства в одном запросе?
Если у меня не было parent
загружен, я бы жадной загрузки:
Parent parent = db.Parents
.Include(p => p.FirstChild)
.Include(p => p.SecondChild)
.FirstOrDefault();
, но, как я уже говорил, у меня уже есть он загружен без связанных сущностей (и я не могу изменить загрузку код).
Как бы вы загрузили его одним запросом в SQL? Мне кажется, что вам придется снова загрузить родителя, чтобы связать навигационные свойства. Если вы в порядке с пакетной загрузкой, я думаю, вы можете использовать 'Future' из [EntityFramework.Extended] (https://github.com/loresoft/EntityFramework.Extended). – Default
@RazvanDumitru, потому что этот вопрос связан с функцией «ленивой загрузки» Entity Framework – lxa
@Default SQL - отдельный запрос в родительской таблице с двумя объединениями для обоих детей; предлагаемое 'Future()' приятно - хотя это все равно приведет к двум отдельным запросам, насколько я понял? – lxa