当SetMaxResults也被设置时,NHibernate的SetFirstResult(0)方法返回0行

时间:2011-01-28 19:06:36

标签: nhibernate

我一直在尝试为系统中的位置完成搜索页面。这是我第一次尝试在网格中设置分页。

我正在使用Fluent Nhibernate并从SQL 2008数据库中提取数据。

当我使用criteria.SetFirstResult(0).SetMaxResults(10);时,我不会收到任何数据。我正在分析数据库,它看起来不像SQL那样进行搜索。当我将语句更改为criteria.SetFirstResult(1).SetMaxResults(10);时,我在网格中看到第2-11行,我可以看到通过分析器生成的sql。 当criteria.SetFirstResult(0)设置为任何值时,是否有人知道SetMaxResults为什么不起作用?

我附上以下流利的NHibernate代码:

public LocationSearchResults Search(string text, int pageNumber, int pageSize, string orderBy, string orderByDirection)
    {
        var criteria = Session.CreateCriteria(typeof(Location));
        var dis = Restrictions.Disjunction();
        dis.Add(Restrictions.Like("LocationName", text, MatchMode.Anywhere));
        dis.Add(Restrictions.Like("LocationAddress", text, MatchMode.Anywhere));
        dis.Add(Restrictions.Like("LocationCity", text, MatchMode.Anywhere));
        dis.Add(Restrictions.Like("LocationState", text, MatchMode.Anywhere));
        dis.Add(Restrictions.Like("LocationZip", text, MatchMode.Anywhere));
        criteria.Add(dis);

        LocationSearchResults results = new LocationSearchResults();
        results.NumberOfResults = criteria.List<Location>().Count;

        if (orderByDirection == "asc")
        {
            criteria.AddOrder(Order.Asc(orderBy));
        }
        else
        {
            criteria.AddOrder(Order.Desc(orderBy));
        }

        //criteria.SetFirstResult((pageNumber - 1) * pageSize).SetMaxResults(pageSize);
        criteria.SetFirstResult(0);
        criteria.SetMaxResults(10);

        results.SearchResults = (List<Location>)criteria.List<Location>();

        return results;
    }
    #endregion

1 个答案:

答案 0 :(得分:0)

回过头来看这个问题后,我想出了发生了什么。我注意到NHibernate实际上是在抛出一个错误。消息是“查询应以'SELECT'或'SELECT DISTINCT'开头。 NHibernate 2nd lvl cache, custom query, sqldialect中的第一个答案解决了我的问题。我必须在配置文件中将use_sql_comments设置为false。