一、 问题
项目中如果使用了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
标签:分页,offset,sqlserver,ef6,NEXT,OFFSET,ProviderManifestToken,SQL,2008 From: https://www.cnblogs.com/superfeeling/p/17007371.html