EF Core 2.2 - запрос отправляется в базу данных при использовании SelectMany и Включить - PullRequest
1 голос
/ 25 сентября 2019

У меня есть класс 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() не было достаточно для получения всех тегов для ресурсов, чтобы он не выполнял дальнейшие запросы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...