我正在使用nHibernate并尝试实现一些分页。如果我运行此代码
IList list = session.CreateQuery("FROM Author").List();
它返回8条记录。如果我运行此代码
IList list = session.CreateQuery("FROM Author")
.SetFirstResult(1).SetMaxResults(5).List();
它返回0条记录。当我看到生成的SQL时,我看不到有任何分页逻辑。
最可能的错误是什么?
答案 0 :(得分:3)
我不确定NHibernate,但在Java中,结果索引是基于0的。尝试调用.SetFirstResult(0)而不是.SetFirstResult(1),否则如果只有一行,则返回0结果。听起来你有8行,所以我不知道为什么你不会在任何情况下得到一些结果。
答案 1 :(得分:1)
你的语法是正确的,所以只要该表中有数据,我就不确定它为什么会返回0结果。
就生成的SQL而言,MSSQL Server不支持LIMIT和OFFSET命令,因此无法在服务器上以这种方式实现分页。 (n.b.我的理解是SQL Server 2005改进了分页方法,但仍然不支持LIMIT或OFFSET)因此,对于SQL 2000,必须检索所有行,然后从该结果集中选择子集。
我可以建议的另一件事是检查您的查询是否在单独的事务中。我看过帖子表明这可能会有所帮助。可能有一些东西,因为我使用SetFirstResult / SetMaxResults的单元测试是成功的。
答案 2 :(得分:0)
也许在web.config或app.config
中检查您的Dialect和Connection Provider <property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property>
<property name="connection.provider">NHibernate.Connection.DriverConnectionProvider</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>