我有一个Asset
类,其中有一个孩子Tag
列表:
public class Asset
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public int AssetID { get; set; }
public virtual List<Tag> Tags { get; set; }
}
public class Tag
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public int TagID { get; set; }
public virtual Asset Asset { get; set; }
}
执行查询以检索所有资产及其标记时,如下所示:
public class GetAssetsQuery
{
readonly IDataContext dataContext;
public GetAssetsQuery(IDataContext dataContext)
{
this.dataContext = dataContext;
}
public async Task<List<Asset>> Execute(User user)
{
var allAssets = await dataContext.Assets
.Include(x => x.Tags)
.ToListAsync();
return allAssets;
}
}
还有另一个查询,用于使用SelectMany
获取所有标签:
public class GetTagsQuery
{
readonly GetAssetsQuery getAssetsQuery;
public GetTagsQuery(GetAssetsQuery getAssetsQuery)
{
this.getAssetsQuery = getAssetsQuery;
}
public async Task<IEnumerable<Tag>> Execute(User user)
{
var allAssets = await getAssetsQuery.Execute(user);
var tags = allAssets.SelectMany(x => x.Tags).ToList();
return tags;
}
}
然后,上面的查询针对每种资产再次返回数据库以检索标签。 .Include()
是否不足以检索资产的所有标签,以便它不执行进一步的查询?