Entity Framewrok 7beta7中不同版本sql server自动生成分页sql语句的问题
在EF中,使用linq进行分页是很方便的,假如我们有一个EMP表,结构如下:
public class Emp
{
[Key]
public Guid No { get; set; }
public int Age { get; set; } [Required]
[StringLength(50)]
public string Name { get; set; }
}
如果我们进行分页的话,一般使用Skip和Take方法,这里一行最简单的代码如下:
mContext.Emp.OrderBy(emp => emp.Name).Skip(6).Take(3);
如果我们使用的是EF6,在使用Sql server 2008 r2及更早数据库的时候,自动生成的Sql语句如下:
SELECT TOP (3)
[Extent1].[No] AS [No],
[Extent1].[Age] AS [Age],
[Extent1].[Name] AS [Name]
FROM ( SELECT [Extent1].[No] AS [No], [Extent1].[Age] AS [Age], [Extent1].[Name] AS [Name], row_number() OVER (ORDER BY [Extent1].[Name] ASC) AS [row_number]
FROM [dbo].[Emp] AS [Extent1]
) AS [Extent1]
WHERE [Extent1].[row_number] > 6
ORDER BY [Extent1].[Name] ASC
如果我们使用的是EF6,在使用Sql server 2012或2014数据库的时候,自动生成的Sql语句如下:
SELECT
[Extent1].[No] AS [No],
[Extent1].[Age] AS [Age],
[Extent1].[Name] AS [Name]
FROM [dbo].[Emp] AS [Extent1]
ORDER BY [Extent1].[Name] ASC
OFFSET 6 ROWS FETCH NEXT 3 ROWS ONLY
因为在 Sql server 2012及以后的数据库中,提供了更高性能的分页方法,就是使用OFFSET ROWS FETCH NEXT ROWS ONLY这几个关键字,EF会根据数据库的不同版本自动生成匹配的sql语句。
但是,在EF7beta7中,也许是bug的问题,始终按照FETCH NEXT 的方法来生成,具体如下:
使用EF7beta7,在使用Sql server 2008 r2及更早数据库的时候,自动生成的Sql语句如下:
SELECT "emp"."No", "emp"."Age", "emp"."Name"
FROM "Emp" AS "emp"
ORDER BY "emp"."Name"
OFFSET 6 ROWS FETCH NEXT 3 ROWS ONLY
使用EF7beta7,在使用Sql server 2012或2014数据库的时候,自动生成的Sql语句如下:
SELECT "emp"."No", "emp"."Age", "emp"."Name"
FROM "Emp" AS "emp"
ORDER BY "emp"."Name"
OFFSET 6 ROWS FETCH NEXT 3 ROWS ONLY
也就是说,两者生成的sql语句一样,这样就会出现问题,在使用Sql server 2008 r2及更早数据库的时候,如果使用linq来分页,就会出现错误。
简单研究了一下,这个错误应该是在ef7源代码中SqlServerQuerySqlGenerator类及其附属类中产生的,希望在新的版本能解决这个问题。
Entity Framewrok 7beta7中不同版本sql server自动生成分页sql语句的问题的更多相关文章
- SQL SERVER 自动生成 MySQL 表结构及索引 的建表SQL
SQL SERVER的表结构及索引转换为MySQL的表结构及索引,其实在很多第三方工具中有提供,比如navicat.sqlyog等,但是,在处理某些数据类型.默认值及索引转换的时候,总有些 ...
- SQL Server 2000/2005 分页SQL — 单条SQL语句
有关分页 SQL 的资料很多,有的使用存储过程,有的使用游标.本人不喜欢使用游标,我觉得它耗资.效率低:使用存储过程是个不错的选择,因为存储过程是经过预编译的,执行效率高,也更灵活.先看看单条 SQL ...
- 仿Orm 自动生成分页SQL
分页的写法 自从用上了Orm,分页这种事就是腰不酸腿不痛了.不过有时候想用纯粹的ado.net来操作,希望返回的数据是原生的DataTable或DbDataReader类似的东西,故研究下怎么生成分页 ...
- 理解性能的奥秘——应用程序中慢,SSMS中快(6)——SQL Server如何编译动态SQL
本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(5)--案例:如何应对参数嗅探 我们抛开参数嗅探的话题,回到了本系列的最 ...
- 数据库 alert.log 日志中出现 "[Oracle][ODBC SQL Server Wire Protocol driver][SQL Server] 'RECOVER'"报错信息
现象描述: (1).数据库通过调用透明网络实现分布式事务,但透明网关停用后,失败的分布式事务并未清理. (2).数据库 alert 日志 Thu Sep 06 06:53:00 2018 Errors ...
- Microsoft SQL Server Version List(SQL Server 版本)
原帖地址 What version of SQL Server do I have? This unofficial build chart lists all of the known Servic ...
- 如何转换SQL Server 2008数据库到SQL Server 2005
背景介绍: 公司一套系统使用的是SQL SERVER 2008数据库,突然一天收到邮件,需要将这套系统部署到各个不同地方(海外)的工厂,需要在各个工厂部署该数据库,等我将准备工作做好,整理文档 ...
- 开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs
原文:开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs 快速入门:使用 Docker ...
- 【转】sql server数据库操作大全——常用语句/技巧集锦/经典语句
本文为累计整理,有点乱,凑合着看吧! ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ ☆ ☆ ☆ sql 宝 典 ☆ ☆ ☆ 2012年-8月 修订版 ☆ ...
随机推荐
- PID控制及整定算法
一.PID控制算法 PID是比例.积分.微分的简称,PID控制的难点不是编程,而是控制器的参数整定.参数整定的关键是正确地理解各参数的物理意义,PID 控制的原理可以用人对炉温的手动控制来理解.阅读本 ...
- shell入门-shell特性
1.关于! 命令:!! 说明: 执行上一条命令 [root@wangshaojun ~]# pwd/root[root@wangshaojun ~]# !!pwd/root 命令:!n (n表示数字) ...
- Qt乱码解决办法(常量中有换行符)
用记事本打开源代码,然后点另存为,utf-8,编码覆盖 QStringLiteral("打开相机")
- 伪分布模式 hive查询
[root@node1 ~]# lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian ...
- Flask17 Flask_Script插件的使用
1 什么是Flask_Script 可以对flask应用做一些统一的操作 flask_script官网:点击前往 2 安装flask_script pip install -i https://pyp ...
- Spring入门第五课
集合属性 在Spring中可以通过一组内置的xml标签(如:<list>,<set>,<map>)来配置集合属性. 配置java.util.List类型的属性,需要 ...
- UVa 11468 Substring (AC自动机+概率DP)
题意:给出一个字母表以及每个字母出现的概率.再给出一些模板串S.从字母表中每次随机拿出一个字母,一共拿L次组成一个产度为L的串, 问这个串不包含S中任何一个串的概率为多少? 析:先构造一个AC自动机, ...
- c#中Marshal.Copy()方法的使用
c#中Marshal.Copy方法的使用 Marshal.copy()方法用来在托管对象(数组)和非托管对象(IntPtr)之间进行内容的复制 函数有很多重载,如下所示: Copy(array< ...
- 【IDEA下使用tomcat部署web项目】
1.IDEA下的WEB项目新建就不说了. 2.配置tomcat:file-->settings-->Build,Execution,Deployment-->Application ...
- BKMigration
PAAS 1. 停止服务 ./bkcec stop paas 2. 修改install.config 3. 删除中控机 /data/install/.bk_install.step 和原p ...