E' ufficiale sono entrato nel tunnel. Le prime volte che ho sentito parlare di NHibernate l'ho snobbato senza mezzi termini. Piano piano però ho iniziato a seguire i post e negli ultimi giorni mi sono visto i webcast di Marco De Sanctis e Giancarlo Sudano (l'ultimo quello di oggi). La loro passione mi ha contagiato e ora eccomi qui a scrivere i miei primi post.
Ma iniziamo con calma. Come forse tutti quelli che si sono affacciati al mondo NHibernate, la prima cosa che mi sono detto è stata quella di provare a verificare se tutte le esigenze (in termini di persistenza) potessero essere soddisfatte da NHibernate. In alcuni casi la necessità di utilizzare più database, per me è fondamentale.
Il metodo che ho trovato mi sembra abbastanza semplice da implementare. La prima cosa da fare è quella di definire i nostri file XML di configurazione. Questi file prenderanno il posto del file app.config o del web.config. Il frammento di codice seguente mostra come definire i nostri file di configurazione:
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="hibernate" type="NHibernate.Cfg.ConfigurationSectionHandler,NHibernate" />
</configSections>
<hibernate xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
<property name="connection.provider">
NHibernate.Connection.DriverConnectionProvider
</property>
<property name="connection.driver_class">NHibernate.Driver.SqlClientDriver</property>
<property name="dialect">NHibernate.Dialect.MsSql2005Dialect</property>
<property name="default_schema">dbo</property>
<property name="connection.connection_string">CONNECTION_STRING1</property>
<property name="show_sql">true</property>
<mapping assembly="Alex.TestNH.DomainModel"/>
</session-factory>
</hibernate>
</configuration>
Come si può notare tutte le impostazioni per l'accesso al database sono racchiuse nel tag <session-factory>. L'altra cosa che ho inserito, ma non strettamente necessaria ai fini dell'utilizzo di database multipli, è il mapping dell'assembly fatto direttamente da file di configurazione.
A questo punto è sufficiente caricare i nostri file di configurazione e creare le nostre factory. Nel frammento di codice seguente vengono create due factory utilizzando due file di configurazione:
' Creo la prima factory
cfg = New Configuration()
cfg.Configure(Application.StartupPath & "\config\db1.xml")
factoryDB1 = cfg.BuildSessionFactory()
cfg = Nothing
' Creo la seconda factory
' Ricreo l'oggetto configuration per evitare errori di mapping duplicati
cfg = New Configuration()
cfg.Configure(Application.StartupPath & "\config\db2.xml")
factoryDB2 = cfg.BuildSessionFactory()
cfg = Nothing
Tutto qui. Adesso possiamo usare le nostre due factory e operare come al solito.
Alla prossima!