EF Core 2.2-使用SelectMany和Include

时间:2019-09-25 13:56:30

标签: c# asp.net-core entity-framework-core ef-core-2.2

我有一个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()是否不足以检索资产的所有标签,以便它不执行进一步的查询?

0 个答案:

没有答案