在';附近获取不正确的语法;偏移';NHibernate.Linq查询中出错

本文关键字:Linq NHibernate 查询 出错 偏移 不正确 获取 语法 | 更新日期: 2023-09-27 17:59:54

我在使用NHibernate v4.0.0 (.Net Framework 4.0)ASP.NET MVC 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. "OFFSET附近的语法不正确"修改sql命令2012到2008
  2. mssql服务器2008的分页查询在"OFFSET"附近引发错误语法
  3. 理解SSMS 2012中的"OFFSET/FETCH"

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

我不是直接在ssms中或通过命令对象执行sql查询。我正在使用NHibernate.Linq查询。

完整的NHibernate查询:

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

我该如何解决这个问题。请引导我。

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

谢谢!!

在';附近获取不正确的语法;偏移';NHibernate.Linq查询中出错

看来,NHibernate只是被错误地指示使用与SQL Serer 2012 相关的方言

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

刚刚将其设置为2008

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

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