在NHibernate.Linq查询中的'OFFSET'错误附近获取不正确的语法

She*_*ell 3 c# sql-server nhibernate asp.net-mvc nhibernate-configuration

我在我的ASP.NET MVC 4.0应用程序中遇到以下错误NHibernate v4.0.0 (.Net Framework 4.0).NHibernate.Linq查询中显示此错误

Incorrect syntax near 'OFFSET'.
Invalid usage of the option FIRST in the FETCH statement.
Run Code Online (Sandbox Code Playgroud)

在这一行

Line 23:         public IList<Post> Posts(int pageNo, int pageSize)
Line 24:         {
Line 25:             var posts = _session.Query<Post>()  //here
Line 26:                                   .Where(p => p.Published) 
Line 27:                                   .Skip(pageNo * pageSize)
Run Code Online (Sandbox Code Playgroud)

我在SO和其他网站上发现了一些类似的帖子.但是,他们建议使用SQL SERVER 2012而不是2008.是的,我的sql server版本是2008.但是,我已经使用ASP.NET MVC 5 (.Net Framework 4.5)和创建了另一个应用程序NHibernate v3.3.1,它在同一个数据库和相同的sql server版本中运行良好.

一些类似的帖子:

  1. "'OFFSET'附近的语法不正确"modift sql comm 2012至2008
  2. mssql server 2008的分页查询在'OFFSET'附近抛出不正确的语法
  3. 了解SSMS 2012中的'OFFSET/FETCH'

所以,我不认为问题出在我的sql server版本中,至少在我的情况下.

我没有直接执行sql查询到ssms或通过命令对象.我正在使用NHibernate.Linq查询.

完整的NHibernate查询:

 var posts = _session.Query<Post>()
                              .Where(p => p.Published)
                              .Skip(pageNo * pageSize)
                              .Take(pageSize)
                              .Fetch(p => p.Category)
                              .ToList();
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题.请指导我.

如果不充分,请向我询问更多信息.

谢谢 !!

Rad*_*ler 7

似乎NHibernate被错误地指示使用与SQL Serer 2012相关的方言

<property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property>
Run Code Online (Sandbox Code Playgroud)

把它设置为2008年

<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
Run Code Online (Sandbox Code Playgroud)

并且它不会使用更高版本的功能使用此查询实现分页(跳过/获取)功能