NHibernate Fetch in servizi WCF

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

Print

Comments on this entry:

# re: NHibernate Fetch in servizi WCF

Left by Tommaso Caldarola at 09/04/2008 20:04
Gravatar
MAi essere assolutisti, infatti non è vero che non si può utilizzare, lo è, anche con poco sforzo (io ho un sistema in piedi con Remoting dimezzo ma alla fine è la stessa cosa). Certo, non è consigliato, ma è possibile.

Qui una discussione: http://groups.google.com/group/nhusers/browse_frm/thread/ca65a3a08dc0c788#
Comments have been closed on this topic.