在Entity Framework Core中选择多个嵌套级别的子表

zoa*_*oaz 28 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);
Run Code Online (Sandbox Code Playgroud)

我的问题是Select在EF Core中无法识别

错误CS1061"Employees"不包含"Select"的定义,也没有扩展方法"Select"接受类型为"Employees"的第一个参数(您是否缺少using指令或程序集引用?)

我包含的命名空间:

using MyProject.Models;
using Microsoft.Data.Entity;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
Run Code Online (Sandbox Code Playgroud)

Select在EF Core中有什么替代方案.

dev*_*ric 59

您可以使用关键字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);
Run Code Online (Sandbox Code Playgroud)

  • @JasonX这是IntelliSense中的一个错误,只是写你的查询,因为它将是一个实体,它将正常工作. (22认同)
  • 我疯了,或者这不再适用于EF Core 1.1.0?.ThenInclude将父对象视为ICollection,为我提供集合属性而不是单个元素的属性:/ (7认同)

Chr*_*s J 5

此外, .ThenIninclude 智能感知仅适用于第三级,例如:

_Context.A.Include(a => a.B).ThenInclude(B => B.C).ThenInclude(C => C.D)
Run Code Online (Sandbox Code Playgroud)

该声明的最后部分:

 .ThenInclude(C => C.D)
Run Code Online (Sandbox Code Playgroud)

不会显示“D”,所以你必须自己输入D,然后等待一小段时间编译错误就会消失!