首页 > 解决方案 > 表与视图的 EF6 计数查询

问题描述

当我需要从表和视图中获取计数时,我发现 EF6 正在生成不同的 SQL。

假设我在 SQL Server 中有一个名为 Student 的表。假设有一个过滤该表的视图;我们称之为 CurrentStudents。

当我使用 EF6 获取表的计数时,EF 创建的查询与我查询视图计数时生成的查询完全不同。我试图理解为什么它会有所不同。

我有下面的示例代码。

查看表计数代码,我们有:

context.Students.Where(x => x.Status == 1).Count()

这会生成 EF 查询:

SELECT [GroupBy1].[A1] AS [C1]
FROM (SELECT
COUNT(1) AS [A1]
FROM [STUDENTS] AS [Extent1]
WHERE 1 = [Extent1].STATUS)
AS [GroupBy1]

EF 生成 Count SQL 并将其包装在另一个 SELECT 中。没问题。

现在与仅更改代码以获取视图计数形成对比:

context.CurrentStudents.Where(x => x.Status == 1).Count()

生成的视图查询:

SELECT [GroupBy1].[A1] AS [C1]
FROM (SELECT
COUNT(1) AS [A1]
FROM (SELECT [STUDENTS].[ID] as [ID],
[STUDENTS].[STATUS] AS [STATUS],
[STUDENTS].[FIRSTNAME] AS [FIRSTNAME],
[STUDENTS].[LASTNAME] AS [LASTNAME],
[STUDENTS].[AGE] AS [AGE],
[STUDENTS].[MAJOR] AS [MAJOR],
[STUDENTS].[MINOR] AS [MINOR],
[STUDENTS].[DORM] AS [DORM],
[STUDENTS].[GRADDATE] AS [GRADDATE]
FROM [CURRENTSTUDENTS] AS [CURRENTSTUDENTS])
) AS [Extent1]
WHERE 1 = [Extent1].STATUS)
AS [GroupBy1]

本例中的 EF 查询添加了另一个嵌套 SELECT,它选择视图中可用的每一列。我不确定为什么 EF 决定添加额外的详细程度只是因为视图是计数源。只是想知道是否有人对这里的幕后情况有更好的了解。

标签: entity-frameworkentity-framework-6

解决方案


推荐阅读