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

时间:2015-06-26 03:13:04

标签: c# sql-server asp.net-mvc nhibernate 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.

在此行

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)

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

一些类似的帖子:

  1. “Incorrect syntax near 'OFFSET'” modift sql comm 2012 to 2008
  2. Pagination query for mssql server 2008 Throwing Incorrect syntax near 'OFFSET'
  3. Making sense of 'OFFSET/FETCH' in SSMS 2012
  4. 所以,我认为问题不在我的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();
    

    如何解决此问题。请指导我。

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

    谢谢!

1 个答案:

答案 0 :(得分:7)

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

<property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property>

将其设置为2008

<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>

并且它不会使用更高版本Implement paging (skip / take) functionality with this query

中的功能