如何在 ASP.NET MVC 的 EF6 中包含导航 属性 的多个导航属性并进行预加载?
How to include multiple navigation properties of navigation property in EF6 in ASP.NET MVC with eager loading?
我一直在尝试包含以前包含的导航 属性 的多个导航属性,但我还没有找到正确的语法。
实体关系如下图所示:
现在,我想加载所有城市,然后是所有部门,然后是所有员工,当我来到员工时 table 我想加载员工导航属性:项目(a collection 项目)以及导航属性标题和国家/地区。
我的代码语法是:
var model = dbContext.Cities.Include(c => c.Departments.Select(e => e.Employees.Select(p => p.Projects))).ToList();
在上面的代码中,唯一包含的员工导航 属性 是项目(项目列表,由于一对多的关系)。但是如何包含另外两个 Employee 导航属性 Title 和 Country?
您需要或多或少地为每个要加载的导航 属性 重复包含:
var model = dbContext.Cities
.Include(c => c.Departments) /* loads Departments */
.Include(c => c.Departments.Select(e => e.Employees)) /* loads Employees */
.Include(c => c.Departments.Select(e => e.Employees.Select(t => t.Title))) /* loads Title */
.Include(c => c.Departments.Select(e => e.Employees.Select(t => t.Country))) /* loads Country */
.Include(c => c.Departments.Select(e => e.Employees.Select(p => p.Projects))) /* loads Projects */
.ToList();
使用 .ThenInclude
,EF Core 中的语法稍微简单一些,但我不知道在 .NET Framework 中执行此操作的更简单方法。
包括,正如您所见,但不适用于 EF6:
var model = dbContext.Cities
.Include(c => c.Departments)
.ThenInclude(c => c.Employees)
.ThenInclude(c => c.Title)
.Include(c => c.Departments)
.ThenInclude(c => c.Employees)
.ThenInclude(c => c.Country)
.Include(c => c.Departments)
.ThenInclude(c => c.Employees)
.ThenInclude(c => c.Projects)
.ToList();
我一直在尝试包含以前包含的导航 属性 的多个导航属性,但我还没有找到正确的语法。 实体关系如下图所示:
现在,我想加载所有城市,然后是所有部门,然后是所有员工,当我来到员工时 table 我想加载员工导航属性:项目(a collection 项目)以及导航属性标题和国家/地区。
我的代码语法是:
var model = dbContext.Cities.Include(c => c.Departments.Select(e => e.Employees.Select(p => p.Projects))).ToList();
在上面的代码中,唯一包含的员工导航 属性 是项目(项目列表,由于一对多的关系)。但是如何包含另外两个 Employee 导航属性 Title 和 Country?
您需要或多或少地为每个要加载的导航 属性 重复包含:
var model = dbContext.Cities
.Include(c => c.Departments) /* loads Departments */
.Include(c => c.Departments.Select(e => e.Employees)) /* loads Employees */
.Include(c => c.Departments.Select(e => e.Employees.Select(t => t.Title))) /* loads Title */
.Include(c => c.Departments.Select(e => e.Employees.Select(t => t.Country))) /* loads Country */
.Include(c => c.Departments.Select(e => e.Employees.Select(p => p.Projects))) /* loads Projects */
.ToList();
使用 .ThenInclude
,EF Core 中的语法稍微简单一些,但我不知道在 .NET Framework 中执行此操作的更简单方法。
包括,正如您所见,但不适用于 EF6:
var model = dbContext.Cities
.Include(c => c.Departments)
.ThenInclude(c => c.Employees)
.ThenInclude(c => c.Title)
.Include(c => c.Departments)
.ThenInclude(c => c.Employees)
.ThenInclude(c => c.Country)
.Include(c => c.Departments)
.ThenInclude(c => c.Employees)
.ThenInclude(c => c.Projects)
.ToList();