我一直在尝试为系统中的位置完成搜索页面。这是我第一次尝试在网格中设置分页。
我正在使用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
答案 0 :(得分:0)
回过头来看这个问题后,我想出了发生了什么。我注意到NHibernate实际上是在抛出一个错误。消息是“查询应以'SELECT'或'SELECT DISTINCT'开头。 NHibernate 2nd lvl cache, custom query, sqldialect中的第一个答案解决了我的问题。我必须在配置文件中将use_sql_comments设置为false。