2011-01-28 11 views
0

システム内の場所の検索ページを完成させようとしています。これは私のグリッドでページングをセットアップしようとした初めてのことです。SetMaxResultsも設定されている場合、NHibernateのSetFirstResult(0)メソッドは0行を返します

私はFluent Nhibernateを使用しており、SQL 2008データベースからデータを取得しています。

私がcriteria.SetFirstResult(0).SetMaxResults(10);を使用している場合、私はデータを受け取っていません。私はデータベースをプロファイリングしていますが、検索を行うSQLが今までどおり起きているようには見えません。ステートメントをcriteria.SetFirstResult(1).SetMaxResults(10);に変更すると、グリッドに2〜11行目が表示され、プロファイラで生成されたSQLが表示されます。 SetMaxResultsが任意の値に設定されている場合、なぜcriteria.SetFirstResult(0)が機能しないのか分かりませんか?

私は以下の流暢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 
+2

対象とするデータベースを知ることが重要です。流暢ではない。 –

+0

私はSQLサーバー2008データベースを使用しています。 –

+0

私が知る限り、criteria.SetFirstResult(0)はそれを省略したのと同じ効果があります。あなたはクエリを2回実行しているようです。一度だけカウントを取得し、もう一度ページングに基づいて結果を制限します。あなたはそれを行うページングの目的を破っています。 – Vadim

答えて

0

を、私は何が起こったのかを考え出しました。私はNHibernateが実際にエラーを投げていることに気づいた。メッセージは「クエリは「SELECT」または「SELECT DISTINCT」で始まる必要があります。 NHibernate 2nd lvl cache, custom query, sqldialectの最初の答えは私の問題を解決しました。私は自分の設定ファイルでuse_sql_commentsをfalseに設定しなければなりませんでした。

関連する問題