Qual è la differenza tra StatelessSession e Session in NHibernate?

Qual è la differenza tra StatelessSession e Session in NHibernate?

La sessione senza stato non tiene traccia delle entità recuperate. Ad esempio per il normale ISession seguente codice:

var session = sessionFactory.OpenSession()
using(var transaction = session.BeginTransaction()){
    var user = session.Get<User>(1);
    user.Name = "changed name";
    transaction.Commit();
}

comporterà l'aggiornamento nel DB. Questo monitoraggio consuma memoria e rende ISession le prestazioni si degraderanno nel tempo poiché la quantità di entità tracciate è in crescita.

Lo stesso codice con IStatelessSession non farà niente. Le sessioni stateless vengono utilizzate quando è necessario caricare molti dati ed eseguire alcune operazioni di batch. Può essere utilizzato per lavorare con set di dati di grandi dimensioni in uno stile più "ado.net".