5

Ayende opisuje naprawdę świetny sposób na liczbę stron i konkretną stronę danych w jednym zapytaniu tutaj:NHibernate: Jak wybrać podmiot korzeniowy w projekcji

http://ayende.com/blog/2334/paged-data-count-with-nhibernate-the-really-easy-way

Jego metoda wygląda :

IList list = session.CreateQuery("select b, rowcount() from Blog b") 
       .SetFirstResult(5) 
       .SetMaxResults(10) 
       .List(); 

jedynym problemem jest to przykładem jest HQL i muszę zrobić to samo w zapytaniu ICriteria. Aby osiągnąć równoważny ICriteria, muszę zrobić coś takiego:

IList list = session.CreateCriteria<Blog>() 
       .SetFirstResult(5) 
       .SetMaxResults(10) 
       .SetProjection(Projections.RootEntity(), Projections.SqlFunction("rowcount", NHibernateUtil.Int64)) 
       .List(); 

Problemem jest to, nie ma czegoś takiego jak Projections.RootEntity(). Czy istnieje sposób, aby wybrać element główny jako jeden z rzutów na liście projekcji?

Tak, wiem, że mógłbym tylko użyć CriteriaTransformTransformToRowCount(), ale to wymagałoby dwukrotnego wykonania zapytania - raz dla wyników i raz dla liczby wierszy. Korzystanie z kontraktów Futures może trochę pomóc, redukując je do jednej podróży w obie strony, ale wciąż wykonuje kwerendę dwukrotnie na serwerze SQL. W przypadku intensywnych zapytań jest to niedopuszczalne. Chcę uniknąć obciążenia i zwrócić liczbę wierszy i wyniki w tym samym zapytaniu.

Podstawowe pytanie brzmi: za pomocą ICriteria, czy istnieje sposób na wybranie jednostki głównej ORAZ innej projekcji w tym samym czasie?

EDIT: niektóre powiązane linki:

https://nhibernate.jira.com/browse/NH-1372?jql=text%20~%20%22entity%20projection%22

https://nhibernate.jira.com/browse/NH-928

Odpowiedz

Powiązane problemy