我有一个返回用户摘要列表的服务方法:
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
而不是将其作为单独的属性包含?
答案 0 :(得分:0)
Users.Include("BillingAddress.Country")