Ядро Entity Framework — основные сведения о запросе деталей

#entity-framework #linq #entity-framework-core #master-detail

#entity-framework #linq #entity-framework-core #основные сведения

Вопрос:

Я видел много сообщений, показывающих, как выполнить запрос в Entity Framework для получения основных данных, например:

 IQueryable<myobj> foo = _context.Foos.Include(x => x.FooDetails).Where(x => x.Id == fooId);
  

Но я должен справиться с более сложным случаем. Основные сведения, где каждая деталь имеет свои собственные детали.
Что-то вроде:

Foo —> FooDetails —> FooDetailsInfo

Возможно ли это? Если да, то как? Конечно, тупое решение существует, и оно использует цикл. Есть ли более разумный способ достичь этой цели?

Я попытался отредактировать код строки

 IQueryable<myobj> foo = _context.Foos.Include(x => x.FooDetails).Where(x => x.Id == fooId);
  

но я не написал ничего полезного.

Комментарии:

1. какова цель вашего запроса? Какой набор полей вам нужен, я спрашиваю об этом, потому что он вернет все поля — что вам нужно, а что вам вообще не нужно. Это плохо сказывается на производительности и сетевом трафике. Может быть, вам нужен лучший запрос?

Ответ №1:

Да, это возможно. После Include того, как вы можете вызвать ThenInclude

 var foo = _context.Foos
    .Include(x => x.FooDetails)
    .ThenInclude(fd => fd.FooDetailsInfo)
    .Where(x => x.Id == fooId);