entity-framework - Telerik:生成的 SQL 与示例项目不同
问题描述
我正在使用 Progress® Kendo UI® Grid for ASP.NET MVC 来显示类别表中的数据
Telerik 示例应用程序和我的应用程序上生成的 SQL 代码不同(注意:Telerik(2017.1.223.545) 和 .net framework(4.5.1) 所有版本在两个项目中都相同)
为什么在我的应用程序中生成不同的 SQL?我希望我的应用程序以相同的方式生成,以解决其他具有大量数据的项目中的性能问题。
我的应用程序:
public ActionResult ApplicationUserRole_Read([DataSourceRequest] DataSourceRequest request)
{
NorthwindEntities context = new NorthwindEntities();
context.Categories.ToDataSourceResult(request);
return Json("nothing");
}
我的应用程序(生成的 SQL):
2019-08-20 12:46:22,320 [54] INFO RollingFileDBAppender - SELECT
[Extent1].[CategoryID] AS [CategoryID],
[Extent1].[CategoryName] AS [CategoryName],
[Extent1].[Description] AS [Description],
[Extent1].[Picture] AS [Picture]
FROM [dbo].[Categories] AS [Extent1]
ORDER BY [Extent1].[CategoryID] ASC
OFFSET 0 ROWS FETCH NEXT 10 ROWS ONLY
例子:
public ActionResult Paging_Categories([DataSourceRequest] DataSourceRequest request)
{
var northwind = new SampleEntities();
northwind.Categories.ToDataSourceResult(request);
return Json("nothing");
}
示例(生成的 SQL):
2019-08-20 12:19:10,952 [26] INFO Kendo.Mvc.Examples.Models.SampleEntities+<>c line 25 - SELECT TOP (10)
[Extent1].[CategoryID] AS [CategoryID],
[Extent1].[CategoryName] AS [CategoryName],
[Extent1].[Description] AS [Description],
[Extent1].[Picture] AS [Picture]
FROM ( SELECT [Extent1].[CategoryID] AS [CategoryID], [Extent1].[CategoryName] AS [CategoryName], [Extent1].[Description] AS [Description], [Extent1].[Picture] AS [Picture], row_number() OVER (ORDER BY [Extent1].[CategoryID] ASC) AS [row_number]
FROM [dbo].[Categories] AS [Extent1]
) AS [Extent1]
WHERE [Extent1].[row_number] > 0
ORDER BY [Extent1].[CategoryID] ASC
解决方案
两个项目中使用的实体框架不同。出于某种原因,当我使用实体框架版本 6.0.0 时,我们的 Web 应用程序的性能会更快
EF 在不同版本中生成 SQL 的方式不同。
Entity Framework - 6.0.0
SELECT TOP (15)
[Extent1].[EmpId] AS [EmpId],
[Extent1].[Age] AS [Age],
[Extent1].[FirstName] AS [FirstName],
[Extent1].[Lastname] AS [Lastname]
FROM ( SELECT [Extent1].[EmpId] AS [EmpId], [Extent1].[FirstName] AS [FirstName], [Extent1].[Lastname] AS [Lastname], [Extent1].[Age] AS [Age], row_number() OVER (ORDER BY [Extent1].[EmpId] ASC) AS [row_number]
FROM [dbo].[Employees] AS [Extent1]
) AS [Extent1]
WHERE [Extent1].[row_number] > 0
ORDER BY [Extent1].[EmpId] ASC
Entity Framework - 6.1.3
SELECT
[Extent1].[EmpId] AS [EmpId],
[Extent1].[Age] AS [Age],
[Extent1].[FirstName] AS [FirstName],
[Extent1].[Lastname] AS [Lastname]
FROM [dbo].[Employees] AS [Extent1]
ORDER BY [Extent1].[EmpId] ASC
OFFSET 0 ROWS FETCH NEXT 15 ROWS ONLY
Entity Framework - 6.2.0
SELECT
[Extent1].[EmpId] AS [EmpId],
[Extent1].[Age] AS [Age],
[Extent1].[FirstName] AS [FirstName],
[Extent1].[Lastname] AS [Lastname]
FROM [dbo].[Employees] AS [Extent1]
ORDER BY row_number() OVER (ORDER BY [Extent1].[EmpId] ASC)
OFFSET 0 ROWS FETCH NEXT 15 ROWS ONLY
推荐阅读
- tfs - 查看截至特定日期的 TFVC 存储库内容
- macos - 在 MacOS 上启用 git Dreamweaver
- r - 我正在尝试仅读取合并到列表 data.frame 中的多个 .xlsx 文件的尾部
- html - 如何为移动设备和不同的媒体查询定位两个图像
- arrays - TypeError:无法读取未定义的属性“映射”,是否无法将数组作为道具传递给功能组件?
- php - 使用 PHP 从 html 数据导出到 Excel
- python - Python -(更好的文本编辑器集成)更改终端中显示的默认堆栈跟踪格式
- mysql - 使用 postgreSQL 在 Heroku 中的 Laravel 项目托管错误
- python - 如何在python中将列表和单个元素组合成一个元组?
- javascript - 工作箱 - 后台同步 - 离线发布 - 浏览器重新联机时不会触发重播事件