问题
Here's my EF Core code:
int page = 1, rowPerPage = 5;
int count = ctx.Specialty.Count();
int start = page * rowPerPage;
var Select = ctx.Specialty.OrderByDescending(u => u.IdS)
.Skip(start)
.Take(rowPerPage)
.AsEnumerable();
I am using SQL Server 2008 and Visual Studio 2017, and I installed SQL Server 2017 as well. My project is ASP.NET Core.
Error:
Incorrect syntax near 'OFFSET'. Invalid usage of the option NEXT in the FETCH statement
I think the problem is SQL Server 2008.
How can I tell my project to use SQL Server 2017?
回答1:
There is a compatibility setting (UseRowNumberForPaging
) for this which can be configured either in the DbContext itself:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var coonectionString = "Data Source=localhost\\MSSQLSERVER01;Initial Catalog=AppDb01;Integrated Security=True";
optionsBuilder.UseSqlServer(coonectionString, builder => builder.UseRowNumberForPaging());
}
Or as a part of the Startup:
public void ConfigureServices(IServiceCollection services)
{
var coonectionString = "Data Source=localhost\\MSSQLSERVER01;Initial Catalog=AppDb01;Integrated Security=True";
services.AddDbContext<AppDbContext>(options => options.UseSqlServer(coonectionString, builder => builder.UseRowNumberForPaging()));
}
回答2:
sql server 2008 not support from my query
solution:
public class AppDbContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var coonectionString = "Data Source=localhost\\MSSQLSERVER01;Initial Catalog=AppDb01;Integrated Security=True";
optionsBuilder.UseSqlServer(coonectionString);
}
}
Value connection string to the Target server and also inject the settings , The sample code is in the default ASP NET Core project format.
来源:https://stackoverflow.com/questions/53349099/incorrect-syntax-near-offset-invalid-usage-of-the-option-next-in-the-fetch-st