[英]Very slow query in EF Core that fetches multiple children entities with .Include()?
[英]EF Core: Fetching A List of Entities with Their Children
我有Post
和PostImage
实体。 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.