2016-01-13 74 views
2

有没有人可以请解释为什么MSSql2012Dialect上的NHibernate会生成无法由服务器处理的查询?它在没有明确指定排序的情况下以这种方式构建查询。NHibernate ORDER BY CURRENT_TIMESTAMP

... 
ORDER BY CURRENT_TIMESTAMP 
OFFSET 0 ROWS FETCH FIRST 10 ROWS ONLY 
+0

它使用'OFFSET'条款,当'需要PAGING'。在这种情况下,它将通过时间戳选择前10行的顺序。你有一些分页,对吧? – gotqn

+0

你是什么意思“无法由服务器处理”?如果我将该代码附加到普通选择的末尾,它将毫无错误地运行。 –

+0

正确。这是关于分页。 – pavel

回答

3

这是未解决的错误登记在jira的基础上,建议,这是我的解决方法:

public class MyMsSql2012Dialect : MsSql2012Dialect 
{ 
    public override SqlString GetLimitString(SqlString querySqlString, SqlString offset, SqlString limit) 
    { 
     var result = base.GetLimitString(querySqlString, offset, limit); 

     return result.Replace("ORDER BY CURRENT_TIMESTAMP", "ORDER BY 1"); 
    } 
}