急于加载嵌套属性在Entity Framework 6中不起作用

时间:2015-11-25 03:30:36

标签: asp.net entity-framework entity-framework-6 eager-loading

我有一个返回用户摘要列表的服务方法:

public IEnumerable<UserSummary> GetUserSummaries()
{
    return Users.Include(u => u.BillingAddress)
        .Include(u => u.BillingAddress.Country)
        .OrderBy(u => u.Email).Select(u => new UserSummary
        {
            Id = u.Id,
            UserName = u.UserName,
            Email = u.Email,
            BillingAddress = u.BillingAddress,
            Approved = u.Approved,
            Admin = u.Admin,
            Roles = u.Roles.Select(r => r.Name)
        });
}

我遇到的这个问题是BillingAddress.Country并没有像我明确指定的那样急于加载。由于我没有执行.ToList(),因此我收到 InvalidOperationException:已经有一个与此命令关联的打开DataReader,必须先关闭它。

如果我执行ToList(),则异常消失,但随后不是1个查询,它会成为n + 1个查询,因为它会延迟加载国家/地区。

如何为分娩地址加载国家/地区并避免n + 1次查询?

更新:我怀疑是因为我没有将Country投射到UserSummary它被忽略,尽管明确包括在内。我向Country类添加了UserSummary属性,并将该国家投影到该类上。它现在包含在原始查询中。

有没有办法让它加载到UserSummary.BillingAddress.Country而不是将其作为单独的属性包含?

1 个答案:

答案 0 :(得分:0)

Users.Include("BillingAddress.Country")