在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语句的问题的更多相关文章

  1. SQL SERVER 自动生成 MySQL 表结构及索引 的建表SQL

          SQL SERVER的表结构及索引转换为MySQL的表结构及索引,其实在很多第三方工具中有提供,比如navicat.sqlyog等,但是,在处理某些数据类型.默认值及索引转换的时候,总有些 ...

  2. SQL Server 2000/2005 分页SQL — 单条SQL语句

    有关分页 SQL 的资料很多,有的使用存储过程,有的使用游标.本人不喜欢使用游标,我觉得它耗资.效率低:使用存储过程是个不错的选择,因为存储过程是经过预编译的,执行效率高,也更灵活.先看看单条 SQL ...

  3. 仿Orm 自动生成分页SQL

    分页的写法 自从用上了Orm,分页这种事就是腰不酸腿不痛了.不过有时候想用纯粹的ado.net来操作,希望返回的数据是原生的DataTable或DbDataReader类似的东西,故研究下怎么生成分页 ...

  4. 理解性能的奥秘——应用程序中慢,SSMS中快(6)——SQL Server如何编译动态SQL

    本文属于<理解性能的奥秘--应用程序中慢,SSMS中快>系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(5)--案例:如何应对参数嗅探 我们抛开参数嗅探的话题,回到了本系列的最 ...

  5. 数据库 alert.log 日志中出现 "[Oracle][ODBC SQL Server Wire Protocol driver][SQL Server] 'RECOVER'"报错信息

    现象描述: (1).数据库通过调用透明网络实现分布式事务,但透明网关停用后,失败的分布式事务并未清理. (2).数据库 alert 日志 Thu Sep 06 06:53:00 2018 Errors ...

  6. 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 ...

  7. 如何转换SQL Server 2008数据库到SQL Server 2005

        背景介绍: 公司一套系统使用的是SQL SERVER 2008数据库,突然一天收到邮件,需要将这套系统部署到各个不同地方(海外)的工厂,需要在各个工厂部署该数据库,等我将准备工作做好,整理文档 ...

  8. 开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs

    原文:开始使用 Docker (Linux 上运行 SQL Server) 上的 SQL Server 容器 - SQL Server | Microsoft Docs 快速入门:使用 Docker ...

  9. 【转】sql server数据库操作大全——常用语句/技巧集锦/经典语句

    本文为累计整理,有点乱,凑合着看吧! ☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆ ☆ ☆ ☆ sql 宝 典 ☆ ☆ ☆ 2012年-8月 修订版 ☆ ...

随机推荐

  1. 07_ddms透视图介绍

    通过ADB(Android Debug Bridge)安卓调试桥把你的Eclipse(集成开发环境)和你的设备连接在一起.有时候ADB可能会被其他的东西占用.例如WPS会跟你抢ADB(抢端口).如果你 ...

  2. Java解析XML:Jdom解析和SAX解析

    今天看了Java解析XML的几种方法,记录一下 1.Jdom解析 (1)读取XML内容 private static void readXML() { // TODO Auto-generated m ...

  3. 8、Transcriptome Assembly

    Created by Benjamin M Goetz, last modified on Jun 29, 2015 Assembly of RNA-seq short reads into a tr ...

  4. cookie 、Session 和自定义分页

    cookie cookie的由来 大家都知道Http协议是无状态的. 无状态的意思 是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系, 他不会受前面的请求响应情况直接影响, ...

  5. eros --- Windows Android真机调试

    1.下载并安装JDK 2.下载并安装Android Studio 上面两项不管用weex还是eros都是前置条件,度娘有大量教程. 开始eros 手脚架安装: $ npm i -g eros-cli ...

  6. CodeForces - 906D Power Tower(欧拉降幂定理)

    Power Tower CodeForces - 906D 题目大意:有N个数字,然后给你q个区间,要你求每一个区间中所有的数字从左到右依次垒起来的次方的幂对m取模之后的数字是多少. 用到一个新知识, ...

  7. poj 1655 Balancing Act(找树的重心)

    Balancing Act POJ - 1655 题意:给定一棵树,求树的重心的编号以及重心删除后得到的最大子树的节点个数size,如果size相同就选取编号最小的. /* 找树的重心可以用树形dp或 ...

  8. IOS swift实现密码的显示与隐藏切换

    最近做项目遇到一个需要做密码的显示与隐藏功能,简单从功能上讲是比较简单的,但是,ios有个恶心的BUG,就是在切换显示密码后再隐藏密码时输入就被清空了,这个非常不友好,为了解决这个问题,我在网上找了相 ...

  9. java 调用SAP RFC函数错误信息

    RFC接口调用SAP如果有异常会通过com.sap.mw.jco.JCO$Exception: 抛出异常 在开发中遇到的异常有如下 用户名密码可能是错误或者用户无权限,确认用户,必要时联系SAP负责人 ...

  10. HDU2050 折线分割平面

    题目:acm.hdu.edu.cn/showproblem.php?pid=2050 递推: 从直线入手,第n条直线,最多和平面上的直线有n-1个交点,多出(n-1)+1个部分 序号 1 2 3 .. ...