Alkampfer's Place

Il blog di Gian Maria Ricci
posts - 659, comments - 871, trackbacks - 80

My Links

News

Gian Maria Ricci Mvp Logo CCSVI in Multiple Sclerosis

English Blog

Tag Cloud

Article Categories

Archives

Post Categories

Image Galleries

I miei siti

Siti utili

Provider di connessioni per nhibernate

Debbo dire che più conosco nhibernate più lo apprezzo veramente tanto. Stasera mi sono chiesto, posso iniettare una mia connessione in una sessione? Lo scopo di una simile operazione è vario, potrei ad esempio iniettare una connessione durante un test per potere poi fare query dirette al database e verificare che i dati siano scritti bene, oppure potrei volere eseguire codice SQL diretto assieme a nhibernate in una unica transazione etc etc. LA soluzione a questo problema è veramente banale :D.

Nhibernate definisce un interfaccia chiamata IConnectionProvider tramite la quale la sessionFactory recupera la connessione da dare in pasto alla sessione, solitamente viene utilizzato un provider di default definito da queste due righe di configurazione.

<add key="hibernate.connection.provider" value="NHibernate.Connection.DriverConnectionProvider" />
<add key="hibernate.connection.connection_string"   value="MiaStringaConnessione" />

NAturalmente se si volesse creare un proprio provider è sufficiente ereditare da una classe astratta chiamata ConnectionProvider, di cui è possibile implementare la sola funzione GetConnection().

public class MyConnectionProvider : ConnectionProvider  {
 
   
public override System.Data.IDbConnection GetConnection() {
      
IDbConnection conn = new SqlConnection("Server=localhost\\sql2000;initial catalog=NorthWind;User Id=sa;password=ottaedro_2006@");
      conn.Open();
      
return conn;
   }
}

Come si può vedere nell'esempio in questione la connessione viene costruita con una stringa hardcoded, ma le possibilità sono indubbiamente aperte alla nostra fantasia. Chiaramente per sfruttare questo nuovo provider di connessioni è necessario specificare la classe desiderata nel file di configurazione e la connessione restituita deve essere stata precedentemente aperta.

<add
         key="hibernate.connection.provider"
         value="NorthwindTest.MyConnectionProvider, NorthwindTest" />
<add key="hibernate.connection.connection_string"   value="MiaStringaConnessione" />

Non dimenticate di mettere sempre la configurazione connection_string perchè se non presente l'oggetto ConnectionProvider di base genererà un eccezione.

Alk.

 

Print | posted on Friday, August 3, 2007 9:56 PM | Filed Under [ NHibernate ]

Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET