【发布时间】:2017-08-17 04:13:21
【问题描述】:
我有下一个实体
public class Objective
{
public virtual UserInfo AssignedUser { get; set; }
public int? AssignedUserID { get; set; }
public string ObjectiveText { get; set; }
public virtual ICollection<ObjectiveTask> Tasks { get; set; }
public virtual UserInfo User { get; set; }
public int UserID { get; set; }
}
一个目标可以有一个分配的用户和一个用户,但有很多任务。
从 DB 获取实体后,我将其映射到 DTO 类,如下所示
public class ObjectiveListViewModel
{
public string AssignedString { get; set; }
public string ObjectiveText { get; set; }
public int TasksCount { get; set; }
public string UserContactName { get; set; }
}
映射设置不计量
当我使用这样的查询进行此操作时
(from objective in context.Set<Objective>() select objective)
.Include(o => o.User)
.Include(o => o.AssignedUser)
.ToListAsync();
一切正常 - 加载用户和分配的用户属性,无需对数据库进行额外查询以获取其数据。
但我需要任务数量的回报目标。 为此,我创建了一个通用类
public class EntitySubCount<TEntity>
{
public TEntity Entity { get; set; }
public int GroupCount { get; set; }
}
并以这种方式使用它
(from objective in context.Set<Objective>() select objective)
.Include(o => o.User)
.Include(o => o.AssignedUser)
.Select(o=> new EntitySubCount<Objective> {
Entity = o,
GroupCount = o.Tasks.Count })
.ToListAsync();
但是用户和分配的用户属性没有加载,它需要额外的查询数据库来获取他们的数据。 我理解这是因为延迟加载。
问题是 - 我如何从数据库中获取加载导航的实体。属性和任务计数?
感谢您的帮助
【问题讨论】:
标签: entity-framework linq