实体框架 AsSplitQuery 功能不起作用

Vla*_*sly 3 c# entity-framework-core .net-core

我想使用新的奇特的分割查询功能AsSplitQuery()

var result = await ctx.TObjects                    
                      .Include(o => o.ObjectPrototype)
                      .Include(o => o.ObjectIdentity)
                      .AsSplitQuery()
                      .ToListAsync(token);
Run Code Online (Sandbox Code Playgroud)

但生成的 SQL 查询没有拆分。我究竟做错了什么?使用 Entity Framework Core 的第六版。

SELECT 
    t.id, t.md5, t.object_id, t.object_prototype, &etc
FROM
    t_objects AS t
LEFT JOIN 
    t_object_guids AS t0 ON t.object_prototype = t0.id
INNER JOIN 
    t_object_guids AS t1 ON t.object_id = t1.id
Run Code Online (Sandbox Code Playgroud)

Iva*_*oev 8

你没有做错什么。但是,拆分查询在包含相关集合时才执行多个查询,因为它们是倍增“主”数据记录并导致文档链接中提到的“笛卡尔爆炸”问题的查询。引用导航属性的基数为 0..1,因此数据作为“主”数据记录的一部分返回(只需添加更多列)。

因此,分割查询结果是通过对主实体和所有包含的引用执行 1 个 SQL 查询,加上对每个包含的集合执行 1 个 SQL 查询来实现的。

您的示例查询仅包含引用,因此结果是 1 个 SQL 查询(未拆分)。