Sql server 2008 SQL Server 2008和EF7(RC1)-无法跳过()和执行()?

Sql server 2008 SQL Server 2008和EF7(RC1)-无法跳过()和执行()?,sql-server-2008,pagination,asp.net-core,entity-framework-core,Sql Server 2008,Pagination,Asp.net Core,Entity Framework Core,我知道SQLServer2012及更高版本为分页提供了一种新的偏移量语法,EntityFramework7似乎将我的LINQ转换为这种语法 这解释了为什么在“OFFSET”附近出现错误错误语法。FETCH语句中NEXT选项的使用无效。,因为SQL Server 2008无法识别它 在中,有人回答说,从RC1开始,我们需要做的就是在启动时添加.userowneumberforpaging()。cs的配置服务() services.AddEntityFramework() .AddSqlServer

我知道SQLServer2012及更高版本为分页提供了一种新的偏移量语法,EntityFramework7似乎将我的LINQ转换为这种语法

这解释了为什么在“OFFSET”附近出现错误
错误语法。FETCH语句中NEXT选项的使用无效。
,因为SQL Server 2008无法识别它

在中,有人回答说,从RC1开始,我们需要做的就是在启动时添加
.userowneumberforpaging()
。cs的
配置服务()

services.AddEntityFramework()
.AddSqlServer()文件
.AddDbContext(选项=>{
options.UseSqlServer(“someConnectionString”).userownNumber for分页();
});

这似乎不起作用。我仍然得到同样的错误。我猜EF7仍然将我的LINQ编译为新的2012+SQL语法。怎么办?

您需要使用SQL2012+来使用skip().take(),它在sql2008中不起作用

对于2008年,您可以使用:

select top 20 * from
(
select *,
ROW_NUMBER() OVER (ORDER BY columnid) AS ROW_NUM
from tablename
) x
where ROW_NUM>10

您的问题似乎已被交叉张贴并在上解决

正如Arthur Vickers所说,这个问题的解决方案是转到项目的
Startup.cs
,并将
UseRowNumberForPaging()
添加到数据库的选项生成器中

services.AddDbContext<ApplicationDbContext>(
  options => {
    options.UseSqlServer(
      this.config.GetConnectionString("MyDatabaseConnectionString"),
      builder => builder.UseRowNumberForPaging()
    );
  }
);
services.AddDbContext(
选项=>{
options.UseSqlServer(
this.config.GetConnectionString(“MyDatabaseConnectionString”),
builder=>builder.UseRowNumberForPaging()
);
}
);

我用.NET Core 2对此进行了测试,效果很好。

您的查询是什么?这可能是EF7中的一个错误。我不认为这与此相关,但任何db.OneOfMyEntities.Where(…)…Skip(x).Take(y).ToList()都会产生此错误。EF7-rc1的Skip and Take中有一些错误,正在为RC2处理。看见
services.AddDbContext<ApplicationDbContext>(
  options => {
    options.UseSqlServer(
      this.config.GetConnectionString("MyDatabaseConnectionString"),
      builder => builder.UseRowNumberForPaging()
    );
  }
);