Quando si utilizza SetFirstResult(start)
e SetMaxResults(count)
metodi per implementare il paging ho notato che la query generata fa solo un select top count * from some_table
e non ci vuole il parametro start
in considerazione o almeno non a livello di database. Sembra che se Incarico NHibernate per eseguire la seguente query:NHibernate paginazione con SQL Server
var users = session.CreateCriteria<User>()
.SetFirstResult(100)
.SetMaxResults(5)
.List<User>();
105 record transiterà tra il server di database e l'applicazione, che si prenderà cura per mettere a nudo i primi 100 record. Con tabelle contenenti molte righe questo potrebbe essere un problema.
Ho verificato che con un database SQLite NHibernate sfrutta le parole chiave OFFSET
e LIMIT
per filtrare i risultati a livello di database. Sono a conoscenza del fatto che non esiste un equivalente della parola chiave OFFSET
e Oracle ROWNUM
in SQL Server 2000 ma esiste una soluzione alternativa? Che ne dici di SQL Server 2005/2008?
Ottima risposta alla giustizia. Grazie per il tuo tempo. –