为何EF Core 2.1会产生多重选择以包含

时间:2018-06-27 10:17:20

标签: sql sql-server ef-code-first ef-core-2.0 ef-core-2.1

我有一个ef命令,它是:

var project = await _context.Set<Project>().Include(p => p.Controllers).FirstOrDefaultAsync(p => p.Id == pid);

并在执行过程中以sql形式生成两个选择:

SELECT TOP(1) [p].[Id], [p].[AppKey], [p].[CreateDate], [p].[Name], [p].[Title]
FROM [Project] AS [p]
WHERE [p].[Id] = @__pid_0
ORDER BY [p].[Id]

SELECT [p.Controllers].[Id], [p.Controllers].[CommandTimeout], [p.Controllers].[ContentType], [p.Controllers].[CreateDate], [p.Controllers].[IsActive], [p.Controllers].[IsJsonSerialize], [p.Controllers].[IsTested], [p.Controllers].[Method], [p.Controllers].[Name], [p.Controllers].[ProjectId], [p.Controllers].[Query], [p.Controllers].[Title]
FROM [Controller] AS [p.Controllers]
INNER JOIN (
    SELECT TOP(1) [p0].[Id]
    FROM [Project] AS [p0]
    WHERE [p0].[Id] = @__pid_0
    ORDER BY [p0].[Id]
) AS [t] ON [p.Controllers].[ProjectId] = [t].[Id]
ORDER BY [t].[Id]

问题是,为什么可以生成两个独立的sql命令,而第一个却可以跳过呢?这背后有什么原因吗?对我来说,这似乎是一个错误!

0 个答案:

没有答案
相关问题