异常环境:

netcore版本:.Net Core 2.1

efcore版本:Microsoft.EntityFrameworkCore.SqlServer 2.1.1

sql sqlserver 版本:SQL Server 2008 R2

报错代码:

为了兼容2008数据库,配置了 RowNumberForPaging

            var optionsBuilder = new DbContextOptionsBuilder<DbObjectContext>();
optionsBuilder.UseSqlServer(connStr, b => b.UseRowNumberForPaging());
builder.RegisterType<DbObjectContext>()
.As<IObjectContext>()
.WithParameter("options", optionsBuilder.Options)
.InstancePerLifetimeScope();

查询

            var query = _menuService.Where(t => t.MenuType == req.TypeID)
.Where(t => t.IsDel == false)
.Where(t => t.SchoolId == schoolid); var count = query.Count();
var list = new List<CrmCarouselListItem>(); if (count > )
{
var index = req.GetPageIndex();
var size = req.GetPageSize(); query = query.OrderBy(t => t.OrderAsc)
.Skip((index - ) * size)
.Take(size); List<TMenu> rs = null; rs = query.ToList(); }

代码在ToList()方法报异常,而且是并发查询偶尔发生

错误信息:

错误信息不定,一般是莫名其妙的错误或者sql语法错误

例如

System.Data.SqlClient.SqlException (0x80131904): 无法绑定由多个部分组成的标识符 "t0.__RowNumber__"。

或者字段格式错误

An exception occurred while reading a database value for property 'TMenu.ImgUrl'. The expected type was 'System.String' but the actual value was of type 'System.Int32'.

或者莫名的index错误

System.IndexOutOfRangeException: Index was outside the bounds of the array.

等等

去github上EF开源项目,搜索问题发现有人已经提出了一些问题,下面这个应该对应我们上面的字段格式错误,因为EF自动生成的sql查询字段重复导致了错位

The column 'X' was specified multiple times for 'Y' #13922

https://github.com/aspnet/EntityFrameworkCore/issues/5641

或者

RowNumberForPaging, two tables and columns with same name #5641

https://github.com/aspnet/EntityFrameworkCore/issues/5641

后来有个大胡子回复了,大概意思是问我们为什么还在用这个,他们打算弃用的,sql server 2008版本不再打算继续支持了

Consider removing UseRowNumberForPaging #13959

https://github.com/aspnet/EntityFrameworkCore/issues/13959

Because it is generally only needed in SQL Server , which is out of support.

If you're reading this and you use UseRowNumberForPaging, then please comment on this issue and let us know why you are using it.

好吧,掉坑里去了,不用分页应该不会出现这个问题,只要使用了sql server 2008的rownumber分页功能,并且在并发情况下才有概率出现这个问题

坑爹的微软啊,直接说让我们用新版本,新版本授权不要钱麽。。。

更新于2018-11-27

后来大胡子又说不打算停止更新了,将继续支持这个版本的分页

https://github.com/aspnet/EntityFrameworkCore/issues/13959

不过将在3.0版本进行发布,估计得2019年了

等吧,哈哈哈

剧终

【netcore入坑记】 .Net core UseRowNumberForPaging 分页报错 SQL Server 2008 R2 EntityFrameworkCore的更多相关文章

  1. 【.net core 入坑】.net core 3.0 报错:在 FETCH 语句中选项 NEXT 的用法无效

    目录 1.事故现场: 2.分析及解决方案: 1.事故现场: 在项目中使用.net core 3.0,在EF链接sqlserver2008,在程序中使用了分页用的skip和take,程序报错: 在 FE ...

  2. .Net EF Core数据库使用SQL server 2008 R2分页报错How to avoid the “Incorrect syntax near 'OFFSET'. Invalid usage of the option NEXT in the FETCH statement.”

    一.  问题说明 最近.Net EF core 程序部署到服务器,服务器数据库安装的是SQL server 2008 R2,我本地用的的是SQL server 2014,在用到分页查询时报错如下: H ...

  3. ASP .Net Core 在 CentOS8 ARM 下连接 SQL Server 2008 R2(Hypervisor)

    本文主要记录在 ARM 系统下无法连接SQL Server 2008 R2 的解决过程. 解决方案是使用 ODBC 的方式连接数据库,进行操作. 手上有公司的华为鲲鹏云计算 ARM 架构的 CentO ...

  4. 【React踩坑记三】React项目报错Can't perform a React state update on an unmounted component

    意思为:我们不能在组件销毁后设置state,防止出现内存泄漏的情况 分析出现问题的原因: 我这里在组件加载完成的钩子函数里调用了一个EventBus的异步方法,如果监听到异步方法,则会更新state中 ...

  5. maven项目新检出后不编译爬坑记 及 mvn clean package报错 WagonTransporterFactory: java.util.NoSuchElementException 异常【我】

    从SVN新检出一个maven项目,配置好后,发现项目无法编译(只有一个test包中的代码显示编译报错,其他所有包中的代码都不编译,也不报错), 先注释掉报错的test包中的所有内容, 用Eclipse ...

  6. 【React踩坑记三】React项目报错Can't perform a React state update on an unmounted component

    意思为:我们不能在组件销毁后设置state,防止出现内存泄漏的情况 分析出现问题的原因: 我这里在组件加载完成的钩子函数里调用了一个EventBus的异步方法,如果监听到异步方法,则会更新state中 ...

  7. 一、 使用存储过程实现数据分页(Sql Server 2008 R2)

    1.废话不多说了,直接上代码.调用这个存储过程只需要传递 表名,排序字段,搜索字段,以及页码,页码数量,搜索值(可空) create PROCEDURE NewPage --通用的分页存储过程,百万数 ...

  8. SQL Server 2008 R2——统计各部门某年入职人数

    =================================版权声明================================= 版权声明:原创文章 谢绝转载  请通过右侧公告中的“联系邮 ...

  9. 记一次数据库同步经历(sql server 2008)

    前阵子搞了下数据库同步,大概意思就是服务器上有一个数据库,与本地数据库进行同步,服务器上的数据库有什么改变,可以同步到本地数据库中.做之前百度了下,流程分以下三步, 第一步: 服务器上的数据库进行发布 ...

随机推荐

  1. ArcGIS教程:曲率

    摘要 计算栅格表面的曲率,包括剖面曲率和平面曲率. 用法 · 主要输出结果为每个像元的表面曲率,该值通过将该像元与八个相邻像元拟合而得.曲率是表面的二阶导数,或者可称之为坡度的坡度.可供选择的输出曲率 ...

  2. Knockout.Js官网学习(checked 绑定)

    前言 checked绑定是关联到checkable的form表单控件到view model上 - 例如checkbox(<input type='checkbox'>)或者radio bu ...

  3. 64位电脑上启动程序出现丢失MSVCR110.dll的解决办法

    启动程序报错如下: 无法启动此程序,因为计算机中丢失MSVCR110.dll.尝试重新安装该程序以解决此问题. 应该很容易就搜索到,缺少这样的dll文件,是没有安装Visual C++ Redistr ...

  4. addEventListener 第三个参数

    addEventListener api target.addEventListener(type, listener[, options]); target.addEventListener(typ ...

  5. cache line 伪共享

    https://blog.csdn.net/qq_27680317/article/details/78486220认识CPU Cache CPU Cache概述 随着CPU的频率不断提升,而内存的访 ...

  6. git+gitolite如何实现权限控制

    前言 首先说明一下,这还是本人第一次写这类文章,如有不妥,多多见谅. 基本情况 因为现在公司的人不是很多,但是还对代码有着严格的管控,所以采用了gitolite的管理方式 其实正常来讲,这种权限的把控 ...

  7. 基于CentOS搭建VNC远程桌面服务

    系统要求:CentOS 7.2 64 位操作系统 安装.启动 VNC VNC 远程桌面原理 名词解释: Xorg:在 Linux 用户中非常流行,已经成为图形用户程序的必备条件,所以大部分发行版都提供 ...

  8. Gradle环境变量的配置

    配置GRADLE_HOME: 找到Android Studio中gradle的位置 E:\Android_Studio\gradle\gradle-2.10 配置GRADLE_USER_HOME: 找 ...

  9. Java Lombok

    Reducing Boilerplate Code with Project Lombok https://projectlombok.org/features/all https://github. ...

  10. linux每日命令(30):Linux 用户及用户组相关文件、命令详解

    一. 用户.用户组概念及其文件结构详解 Linux用户只有两个等级:root及非root.Linux中还有一部分用户,如:apache.mysql.nobody.ftp等,这些也都是非root用户,即 ...