繁体   English   中英

EF Core:获取带有孩子的实体列表

[英]EF Core: Fetching A List of Entities with Their Children

我有PostPostImage实体。 Post实体可以有一个PostImage实体列表(即一对多)。 我想获取所有帖子的列表并包含其所有图像列表。 所以我写了下面的一段代码:

var posts = _appDataContext.Posts
    .Select(x => new
    {
        x.Id,
        x.Title,
        x.Body,
        Images = x.Images.Select(y => new
        {
            y.Id
        })
    });

代码全部在数据库中执行,这正是我想要的,但这里有一个问题。 从控制台日志中,EF 似乎首先获取帖子列表,然后遍历它们以获取相应的图像(额外的查询 + 额外的获取时间)。 有没有其他方法可以一次获取所有数据(帖子+他们的图片)。 帖子和图片都有额外的列,这就是我使用Select语句的原因; 过滤掉我不需要的列。 我尝试使用Include ,但没有任何改变。

PS 我正在使用 EntityFramework 核心。

立即(单个 SQL 查询)- 不。 因为这就是 EF Core 查询的工作方式。 最少为主要数据的 1 个 SQL 查询 + 每个集合的 1 个 SQL 查询。 对于您的情况,最少需要 2 个 SQL 查询。 仍然比您目前遇到的 N + 1 查询问题要好得多。

解决方案是使用具有优化相关子查询的EF Core 2.1+。 同样如文档链接中所述,您必须通过“在正确的位置包含ToList()来选择加入该优化:

var posts = _appDataContext.Posts
    .Select(x => new
    {
        x.Id,
        x.Title,
        x.Body,
        Images = x.Images.Select(y => new
        {
            y.Id
        }).ToList() // <--
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM