NHibernate
Alle volte (anzi, molto spesso) nel realizzare la nostra
applicazione non abbiamo tutta la libertà di questo mondo, magari perché lo
schema DB ci viene "imposto" da un'altra figura professionale. In questi casi
non è raro trovarsi ad avere a che fare con chiavi primarie composte, che si
estendono cioé su più colonne. Con NHibernate possiamo gestire egregiamente
anche situazioni di questo tipo, anche se è bene sottolineare che le cose si
complicano un pochino quindi, nel caso in cui si debba partire da zero, è
sempre meglio utilizzare la solita surrogate key,
semplice, invariante e priva di significato.
Bene, supponiamo di avere...
Nonostante l'oggetto Session sia privo di
eventi, NHibernate offre comunque un supporto a chi voglia realizzare dei metodi di
Callback implementando il pattern Observer tramite un oggetto particolare denominato
Interceptor. Esso non è altro che una classe che implementa
l'interfaccia IInterceptor, la quale espone alcuni metodi che vengono richiamati
dalla Session in corrispondenza delle operazioni di Load, Save, Flush, ecc...
L'associazione di un Interceptor ad una Session avviene all'atto della sua
creazione, tramite un particolare overload del metodo
SessionFactory.CreateSession
:
ISession mySession = SessionFactory.CreateSession(myInterceptor);
Come potrete immaginare, un oggetto del...
Ereditarietà e polimorfismo sono due caratteristiche
della programmazione OO estremamente potenti, che possono essere sfruttate anche
nella costruzione di domini complessi. La persistenza su un DBMS di queste
strutture, però, pone dei problemi, in quanto non sono direttamente mappabili su
un modello ER.
Supponiamo di dover persistere su DBMS il seguente dominio:
Come realizzare lo schema del DB? Beh, una trattazione completa
dell'argomento è decisamente eccessiva, per cui si rimanda ad altre fonti, a noi
basta semplicemente sapere che le scelte più usate ricadono tra:
Table per class hierarchy, in cui una sola tabella contiene una colonna per ogni
...
Il pattern LazyLoad è quasi sempre utilizzato in
NHibernate per il caricamento delle collection di childs in una relazione
Master/Detail. Non tutti sanno invece che è possibile applicare questo pattern a
tutti i tipi di relazioni, potendo così ottimizzare di molto la dimensione delle
query che vengono effettuate su DB e la mole di dati che viene recuperata.
Capita spesso di avere classi con parecchie
relazioni Many-To-One, vuoi perché si tratta di classi "dettaglio"
di qualcosa, vuoi perché se
creo la classe Articolo magari questa espone una proprietà Tipo di...