Выберите несколько вложенных уровней дочерних таблиц в Entity Framework Core
Я хочу получить несколько вложенных уровней дочерних таблиц в Entity Framework Core, используя активную загрузку. Я не думаю, что ленивая загрузка уже реализована.
Я нашел ответ для EF6.
var company = context.Companies
.Include(co => co.Employees.Select(emp => emp.Employee_Car))
.Include(co => co.Employees.Select(emp => emp.Employee_Country))
.FirstOrDefault(co => co.companyID == companyID);
Моя проблема заключается в том, что Select
не распознается в EF Core
Ошибка CS1061 "Сотрудники" не содержит определения для "Выбрать" и не может быть найден метод расширения "Выбрать", принимающий первый аргумент типа "Сотрудники" (вам не хватает директивы использования или ссылки на сборку?)
Мои включенные пространства имен:
using MyProject.Models;
using Microsoft.Data.Entity;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
Какая альтернатива для Select
в EF Core.
Ответы
Ответ 1
ThenInclude
этого вы можете использовать ключевое слово ThenInclude
например
var company = context.Companies
.Include(co => co.Employees).ThenInclude(emp => emp.Employee_Car)
.Include(co => co.Employees).ThenInclude(emp => emp.Employee_Country)
.FirstOrDefault(co => co.companyID == companyID);
Ответ 2
Кроме того,.ThenInclude intellisense для работает только до 3-го уровня, например:
_Context.A.Include(a => a.B).ThenInclude(B => B.C).ThenInclude(C => C.D)
Последняя часть этого заявления:
.ThenInclude(C => C.D)
не будет показывать "D", поэтому вы должны ввести D самостоятельно, а затем подождать некоторое время, пока ошибка компиляции не исчезнет!