Podczas korzystania SetFirstResult(start)
i SetMaxResults(count)
metody wdrożyć stronicowania Zauważyłem, że wygenerowane zapytanie nie tylko select top count * from some_table
i nie bierze się pod uwagę parametr start
lub przynajmniej nie na poziomie bazy danych. Wydaje się, że jeśli będę instruować NHibernate wykonać następujące zapytanie:NHibernate stronicowania z SQL Server
var users = session.CreateCriteria<User>()
.SetFirstResult(100)
.SetMaxResults(5)
.List<User>();
105 rekordy tranzytowy pomiędzy serwerem bazy danych i aplikacji, która zajmie się rozebrać pierwsze 100 rekordów. W przypadku tabel zawierających wiele wierszy może to stanowić problem.
Sprawdziłem, że z bazą danych SQLite NHibernate wykorzystuje słowa kluczowe OFFSET
i LIMIT
do filtrowania wyników na poziomie bazy danych. Jestem świadomy, że nie ma odpowiednika słowa kluczowego OFFSET
i Oracle ROWNUM
w SQL Server 2000, ale czy istnieje jakieś obejście tego problemu? A co z SQL Server 2005/2008?
Świetna odpowiedź @Justice. Dziękuję za Twój czas. –