异常环境:

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. EasyUI学习总结(三)——easyloader源码分析(转载)

    声明:这一篇文章是转载过来的,转载地址忘记了,原作者如果看到了,希望能够告知一声,我好加上去! easyloader模块是用来加载jquery easyui的js和css文件的,而且它可以分析模块的依 ...

  2. 端口转发工具rinetd的安装与配置

    端口映射和转发在实际应用中非常常见,比如一个局域网只有一台服务器可以被互联网访问到,那么如果想通过互联网访问局域网中其他的服务,最常用的方式就是在这一台机器上开放端口,然后转发至局域网中其他主机的端口 ...

  3. WPF 使用HttpListener搭建本地web服务器

    准备工作 using Micro.Listener 类(Micro.Listener.dll)下载 调用示例:一.启动服务:new Micro.Listener.ListenerSync(8080). ...

  4. CCNA实验3.单臂路由器

    拓扑图: 一.交换机配置 通过路由器子接口的方式实现vlan之间的路由. conf t vlan 10 vlan 20 int f0/1 switchport access vlan 10 int f ...

  5. Shell脚本编程实战一:创建按天备份的脚本工具

    转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/8241256.html 一:准备工作:创建归档目录 与  归档配置文件 归档目录:创建一个仓库目录,专门用于存放 ...

  6. MongoDB中MapReduce介绍与使用

    一.简介 在用MongoDB查询返回的数据量很大的情况下,做一些比较复杂的统计和聚合操作做花费的时间很长的时候,可以用MongoDB中的MapReduce进行实现 MapReduce是个非常灵活和强大 ...

  7. 全球最全路由DNS服务器IP地址

    全球只有13台路由DNS根服务器,在13台路由服务器中,名字分别为“A”至“M”,其中10台设置在美国,另外各有一台设置于英国.瑞典和日本.下表是这些机器的管理单位.设置地点及最新的IP地址. 供应商 ...

  8. Dive into Python

    写这篇文章的原因完全是为了督促自己每天晚上看完两章<Dive Into Python>这本书,因此,很多内容都是摘抄自原书的翻译版或者是自己瞎想,于是就顺带着记录了下来.此前已经看完前两章 ...

  9. Kriging插值法

    克里金法是通过一组具有 z 值的分散点生成估计表面的高级地统计过程.与插值工具集中的其他插值方法不同,选择用于生成输出表面的最佳估算方法之前,有效使用克里金法工具涉及 z 值表示的现象的空间行为的交互 ...

  10. Socketserver 笔记

    引入Socketserver的背景: 我们之前使用socket编程的时候,Server端创建一个连接循环(建立连接)+一个通信循环(基于一次连接建立通信循环),(这里的黏包问题我们的实现方式是:我们在 ...