Se sviluppate servizi WCF sessionless con NHibernate il lazy loading non potete utilizzarlo. Questo implica che l'ottimizzazione sul fetching utilizzata da NHibernate durante le select di relazioni 1-many o many-to-many non è più valida e va sostituita da un'altra strategia.
Per chiarire la cosa:
elemento padre A con 2 relazioni a 2 tabelle B e C.
- per Default la strategia di fetching utilizzata da NHibernate è select che implica che una seconda select venga utilizzata per recuperare i figli di un elemento (su richiesta se lazy loading è attivo). Chiaramente se lazy loading è false, ogni get di un elemento padre implica 3 roundtrip al server database per recuperare i figli da B e da C, quindi per una tabella con 50000 record vengono effettuate 150000 select invece di 50000.
- In questi casi la strategia corretta da utilizzare è la join che dice ad NHibernate di recuperare i figli con una singola select utilzizando OUTER JOIN con notevole incremento delle performance.
posted @ mercoledì 9 aprile 2008 18:58