ef6不支持sqlserver 2008的offset语句分页解决
一、 问题
项目中如果使用了EF6,数据库是2008,而分页会收到类似如下的错误提示:
{ "Depth": 0, "ClassName": "", "Message": "Incorrect syntax near 'OFFSET'.\r\nInvalid usage of the option NEXT in the FETCH statement.", "Source": "Core .Net SqlClient Data Provider", }
二、原因
通过问题描述可以分析是数据库SQL server 2008 R2版本SQL语句不支持关键字OFFSET,NEXT,因为这两个关键字是SQL server 2012以后的新特性。
三、解决
1、在.net Framework中,如果是dbFirst方式,可以通过修改edmx文件进行解决,将ProviderManifestToken属性设置为"2008",在第7行。
ProviderManifestToken="2012" ==> ProviderManifestToken="2008"
2、在.net Core中,通过配置.UseRowNumberForPaging() 即配置用row number SQL关键字进行分页。
public void ConfigureServices(IServiceCollection services) { services.AddDbContext<ATreeContext> (options => options.UseSqlServer(_config["ConnectionStrings:DefaultConnection"], p => p.UseRowNumberForPaging ())); }
参考:
https://cloud.tencent.com/developer/ask/sof/55856
https://www.cnblogs.com/atree/p/netcroe-EF-SQL-Server-OFFSET-NEXT-PAGE.html
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库