【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)
前阵子搞了下数据库同步,大概意思就是服务器上有一个数据库,与本地数据库进行同步,服务器上的数据库有什么改变,可以同步到本地数据库中.做之前百度了下,流程分以下三步, 第一步: 服务器上的数据库进行发布 ...
随机推荐
- [原创]DevOps 的技术栈和工具
[原创]DevOps 的技术栈和工具 版本控制:GitHub.GitLab.SubVersion 自动化构建和测试:Maven .Selenium.JMeter.Gradle 持续集成&交付: ...
- ADSL理解
ADSL技术提供的上行和下行带宽不对称,因此称为非对称数字用户线路. ADSL技术采用频分复用技术把普通的电话线分成了电话.上行和下行三个相对独立的信道,从而避免了相互之间的干扰.用户可以边打电话边上 ...
- Meclipse alt+/ 没有提示
- Uboot 常用指令
转自:https://blog.csdn.net/dagefeijiqumeiguo/article/details/51314856 bootm 用于将内核镜像加载到内存的指定地址处 例: boo ...
- 内核同步机制-RCU同步机制
转自:https://blog.csdn.net/nevil/article/details/7718375 转自http://www.360doc.com/content/09/0805/00/36 ...
- Java全栈程序员之01:做个Linux下的程序猿
Windows10正在成为史上口碑最差的Windows系统 (图侵删) 我曾经花了数次1小时去寻找解决方案去关闭自动更新,包括停掉服务.修改注册表等等.但是都没有成功. 微软自身是知道这个问题的,但就 ...
- Java 面试题 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 使用JDBC在MySQL数据库中快速批量插入数据
使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(10W+),如何提高效率呢? 在JDBC编程接口中Statement 有两个方法特别值得注意: void addBatch ...
- [Python设计模式] 第8章 学习雷锋好榜样——工厂方法模式
github地址:https://github.com/cheesezh/python_design_patterns 简单工厂模式 v.s. 工厂方法模式 以简单计算器为例,对比一下简单工厂模式和工 ...
- ui-router 1.0 002 未登录跳转到login
ui-router transitionhooks 统一控制路由跳转, 前台控制如果没有登录就跳转到登录页面, 当然也可以在后台控制, 如果没有登录就返回对应的错误码, 然后在response中直接跳 ...