我有一个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命令,而第一个却可以跳过呢?这背后有什么原因吗?对我来说,这似乎是一个错误!