entity-framework - 表与视图的 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 决定添加额外的详细程度只是因为视图是计数源。只是想知道是否有人对这里的幕后情况有更好的了解。
解决方案
推荐阅读
- python - python 3 curses 包装器的类型提示
- javascript - 如何协调 React 的 setState 与使用 URL 作为单一事实来源?
- javascript - 使用 moment.js 如何将 moment 对象转换为分钟?
- sql-server - 使用 MSSMS 制作的 SQL 备份文件不起作用...在 MSSMS(Microsoft SQL Server Management Studio)上
- database - 如何从 mac 上的 postgresql 本机应用程序中删除数据库?
- node.js - 谷歌云函数(获取图片尺寸)
- python - (Python)在用户定义的函数中尝试和除外
- javascript - Facebook 以错误请求和欺骗用户代理、600K+ javascript 错误访问我们的网站。如何缓解?
- node.js - 为什么 npm init 无法在目录中成功启动?
- pandas - KMeans 聚类中种子和 num_runs 的重要性