【问题标题】:How to include multiple navigation properties of navigation property in EF6 in ASP.NET MVC with eager loading?如何通过预加载在 ASP.NET MVC 中的 EF6 中包含导航属性的多个导航属性?
【发布时间】:2020-07-03 22:34:35
【问题描述】:

我一直在尝试包含以前包含的导航属性的多个导航属性,但我还没有找到正确的语法。 实体关系如下图所示:

现在,我想加载所有城市,然后是所有部门,然后是所有员工,当我来到员工表时,我想加载员工导航属性:项目(项目的集合)以及导航属性标题和国家/地区。

我的代码语法是:

var model = dbContext.Cities.Include(c => c.Departments.Select(e => e.Employees.Select(p => p.Projects))).ToList();

在上面的代码中,唯一包含的 Employee 导航属性是 Projects(项目列表,由于一对多的关系)。但是如何包含另外两个 Employee 导航属性 Title 和 Country?

【问题讨论】:

    标签: c# asp.net-mvc linq entity-framework-6


    【解决方案1】:

    您需要或多或少地为要加载的每个导航属性重复包含:

    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();
    

    【讨论】:

    • 谢谢,你帮了我很多。我不知道这是加载导航属性的多个导航属性的正确语法。为了包括员工的职位或国家/地区,我应该输入: .Include(c => c.Departments.Select(e => e.Employees.Select(t => t.Title))) 或 .Include(c = > c.Departments.Select(e => e.Employees.Select(co => co.Country))) 包括项目后。我测试过,它可以工作。
    猜你喜欢
    • 2019-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多