NHibernate è un ORM, ovvero un sistema che ci permette di pensare alle informazioni memorizzate su database come a oggetti da gestire senza pensare al tipo di motore relazionale né alle interrogazioni.
Abbiamo già introdotto NHibernate in passato ed abbiamo già visto alcune realizzazioni con ASP.NET.
In questo articolo aggiungiamo alcuni elementi fondamentali sia alla trattazione, sia agli esempi. Parleremo di di come gestire il mapping delle relazioni e di come questo aspetto non possa prescindere da precise scelte che coinvolgono l'architettura del sistema.
Negli articoli già citati ci siamo occupati di come mappare semplici entità, ora osserviamo come come gestire le relazioni tra oggetti. Per semplicità riprendiamo l'esempio già proposto e aggiungiamo un nuovo oggetto chiamato ordine, in relazione con l'oggetto CustomerOne.
Figura 1. Relazione tra ordine e CustomerOne
Nella notazione del Class Designer di Visual Studio, abbiamo definito, nella classe Order, una proprietà chiamata Customer che è di tipo CustomerOne.
La differenza con un normale dataset "strongly typed" è chiara, in quel caso avremmo inserito una semplice proprietà CustomerId, di tipo Int32, che conterrebbe l'id del cliente associato.
Ecco come si presenta il mapping di un ordine.
<class name="Order" table="Orders" lazy="false">
<id name="id" unsaved-value="0" access="field" type="System.Int32">
<generator class="native" />
</id>
<property name="Date" column="Date" type="System.DateTime"/>
<many-to-one name="Customer"
class="CustomerOne"
column="CustomerId"
not-found="exception"
not-null="true" />
</class>
La particolarità è che la proprietà Customer viene mappata come many-to-one, ma d'altra parte questa non è una sorpresa, perché la relazione tra CustomerOne e Order è di tipo "molti a uno" in cui l'ordine è nella parte "molti".
Questa associazione, come una normale proprietà, possiede un set di attributi che permettono di specificarne il funzionamento. L'attributo class serve ad indicare a NHibernate il tipo di oggetto usato nella relazione e tramite column si indica la colonna usata per memorizzare la foreign-key.
Guida Windows Azure Code SnippetsLe migliori pratiche per far girare le applicazioni "in the cloud",... |
Guida ASP.NET MVC Best PracticesUn workflow dettagliato e ricco di suggerimenti pratici per... |
Guida ASP.NET Starter KitUn modo semplice per imparare ad utilizzare le tecnologie Microsoft... |
Ogni giovedì, direttamente nella tua e-mail: articoli, guide, tutorial e script ASP, ASP.Net, SQL server e IIS.
Iscriviti alla newsletter
|
|
Corso Progettazione database11 Maggio 2012 a Milano |
|
|
Amministratore di Reti Windows Server 200811 Giugno 2012 a Milano |
|
Nessun corso previsto |