Crad's .NET Blog

L'UGIblog di Marco De Sanctis
posts - 190, comments - 457, trackbacks - 70

[NHibernate] Nuovo connection model, cosa cambia?

Janky ha scritto in questo post che una delle novità della nuova beta di NHiberante 1.2.0 è il nuovo connection model. Qual è la differenza?

Piccola premessa: è (ed era) possibile fornire alla session una propria connessione, creata esternamente a NHibernate, quindi; in questo caso sarà sempre responsabilità dell'utente gestirne il ciclo di vita.

E nel caso (più comune) in cui lasciamo fare a NHibernate?

Prima di beta 3

La connessione veniva aperta alla prima occasione in cui si rendeva necessaria un'interazione con il DB e da quel momento restava aperta fino alla dispose della Session o ad una chiamata al suo metodo Close(). In questo caso, quindi, era consigliato utilizzare la session all'interno di un blocco using secondo il pattern

  1. Creo l'oggetto session
  2. get/update/save di un oggetto
  3. apporto le modifiche
  4. invoco il Flush() (o meglio il Commit() della transazione)
  5. invoco Session.Dispose()

Chi era presente al workshop di DotNetMarche, ha avuto modo di vedere che tutti gli esempi che io e Giancarlo abbiamo mostrato, seguivano bene o male questa sequenza.

Dalla beta 3

La connessione viene aperta alla prima occasione in cui è necessario e viene chiusa immediatamente dopo aver terminato l'esecuzione delle operazioni scheduled. Ovviamente non ci sono penalizzazioni a livello di performance grazie al connection pooling. Il vantaggio di questo approccio è che, a tutti gli effetti, ci permette di tenere in vita la Session per più tempo, senza per questo incorrere in inutili sprechi di risorse.

Print | posted on giovedì 11 gennaio 2007 15:02 | Filed Under [ NHibernate ]

Powered by:
Powered By Subtext Powered By ASP.NET