3

我的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)andNHibernate v3.3.1,它在相同的数据库和相同的 sql server 版本中运行良好。

一些类似的帖子:

  1. “'OFFSET' 附近的语法不正确”修改 sql comm 2012 到 2008
  2. mssql server 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();

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

如果不足,请向我索取更多信息。

谢谢 !!

4

1 回答 1

8

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

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

只需将其设置为 2008

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

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

于 2015-06-26T06:02:58.803 回答