在';附近获取不正确的语法;偏移';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版本中工作得很好。
一些类似的帖子:
- "OFFSET附近的语法不正确"修改sql命令2012到2008
- mssql服务器2008的分页查询在"OFFSET"附近引发错误语法
- 理解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只是被错误地指示使用与SQL Serer 2012 相关的方言
<property name="dialect">NHibernate.Dialect.MsSql2012Dialect</property>
刚刚将其设置为2008
<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
并且它将不会使用更高版本的功能。使用此查询实现分页(跳过/获取)功能