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...