【netcore入坑记】 .Net core UseRowNumberForPaging 分页报错 SQL Server 2008 R2 EntityFrameworkCore
异常环境:
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的更多相关文章
- 【.net core 入坑】.net core 3.0 报错:在 FETCH 语句中选项 NEXT 的用法无效
目录 1.事故现场: 2.分析及解决方案: 1.事故现场: 在项目中使用.net core 3.0,在EF链接sqlserver2008,在程序中使用了分页用的skip和take,程序报错: 在 FE ...
- .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 ...
- ASP .Net Core 在 CentOS8 ARM 下连接 SQL Server 2008 R2(Hypervisor)
本文主要记录在 ARM 系统下无法连接SQL Server 2008 R2 的解决过程. 解决方案是使用 ODBC 的方式连接数据库,进行操作. 手上有公司的华为鲲鹏云计算 ARM 架构的 CentO ...
- 【React踩坑记三】React项目报错Can't perform a React state update on an unmounted component
意思为:我们不能在组件销毁后设置state,防止出现内存泄漏的情况 分析出现问题的原因: 我这里在组件加载完成的钩子函数里调用了一个EventBus的异步方法,如果监听到异步方法,则会更新state中 ...
- maven项目新检出后不编译爬坑记 及 mvn clean package报错 WagonTransporterFactory: java.util.NoSuchElementException 异常【我】
从SVN新检出一个maven项目,配置好后,发现项目无法编译(只有一个test包中的代码显示编译报错,其他所有包中的代码都不编译,也不报错), 先注释掉报错的test包中的所有内容, 用Eclipse ...
- 【React踩坑记三】React项目报错Can't perform a React state update on an unmounted component
意思为:我们不能在组件销毁后设置state,防止出现内存泄漏的情况 分析出现问题的原因: 我这里在组件加载完成的钩子函数里调用了一个EventBus的异步方法,如果监听到异步方法,则会更新state中 ...
- 一、 使用存储过程实现数据分页(Sql Server 2008 R2)
1.废话不多说了,直接上代码.调用这个存储过程只需要传递 表名,排序字段,搜索字段,以及页码,页码数量,搜索值(可空) create PROCEDURE NewPage --通用的分页存储过程,百万数 ...
- SQL Server 2008 R2——统计各部门某年入职人数
=================================版权声明================================= 版权声明:原创文章 谢绝转载 请通过右侧公告中的“联系邮 ...
- 记一次数据库同步经历(sql server 2008)
前阵子搞了下数据库同步,大概意思就是服务器上有一个数据库,与本地数据库进行同步,服务器上的数据库有什么改变,可以同步到本地数据库中.做之前百度了下,流程分以下三步, 第一步: 服务器上的数据库进行发布 ...
随机推荐
- 为Qemu aarch32开发板添加sd卡
Qemu: 2.8.0 开发板: vexpress 1.制作sd卡镜像 2.分区 sudo losetup /dev/loop0 fs_vexpress_1G.img sudo fdisk /dev/ ...
- PostgreSQL学习手册(角色和权限)
原文地址:http://www.cnblogs.com/stephen-liu74/archive/2012/05/18/2302639.html PostgreSQL是通过角色来管理数据库访问权限的 ...
- C++中的extern
这篇文章解释的简单明了: https://stackoverflow.com/questions/10422034/when-to-use-extern-in-c This comes in usef ...
- Mac下打开多个eclipse
命令行执行: open -n /Eclipse所在路径/Eclipse.app
- 解决IE6-IE8 Js代码不执行问题
一种可能的原因:form标签不完整. 使用在线工具,测试html代码标签的完整性.
- 原创:vsphere概念深入系列五:存储
1.vSphere支持的存储文件格式: 类似于linux下挂载文件系统,需要有驱动器设备,驱动. 挂载后有挂载路径. vSphere 也是一样处理. 挂载名:挂载后可以给存储设备起名,默认为datas ...
- puppet应用案例
- 对actuator的管理端点进行ip白名单限制(springBoot添加filter)
在我们的SpringCloud应用中,我们会引入actuator来进行管理和监控我们的应用 常见的有:http://www.cnblogs.com/yangzhilong/p/8378152.html ...
- phpBB3.2 自动检测浏览器语言
这是根据HTTP request header里的Accept-Language信息来处理的. 首先看一下Accept-Language的格式 Accept-Language: <languag ...
- PCA实现
代码实现分成好多种层级,有的代码只使用标准库实现,有的代码基于其它库实现,有的代码直接调用库中现有的实现. 在本文中,按照不同的层级分别实现PCA 对于分类问题基本任务可以描述如下 x11 x12 x ...