The official Fatica Labs Blog! RSS 2.0
# Saturday, August 28, 2010
Vai alla parte 2: Creare un progetto

Mi è ventuta l’idea di produrre una serie di post che consentano a chi vuole iniziare a lavorare con NHibernate, o almeno a provare per vedere se questo OR/M è la scelta giusta, di creare in modo ordinato un ambiente di test pulito, sapendo bene cosa serve, evitando il percorso “pasticciato” che spesso si fa all’inizio.

Bene, come partenza bisogna scaricare NHibernate. Il posto giusto dove farlo è il progetto su sourceforge, e il modo giusto di farlo è procurare i file binary necessari. Scaricare i sorgenti per il momento può essere tranquillamente tralasciato. Puntando al link di download, vi trovate qualcosa del genere:

s1

Come vedete ci sono più versioni, ed anche una ultima release, che in questo caso è la 3.0.0 Alpha2. Io ho cerchiato la versione 2.1.2 GA che è quella che useremo per questa serie di articoli, ma ho anche cerchiato GA: “general availability”. Dunque, perchè non ho scaricato l’ultima versione ? Cosa significa GA ? NHibernate ha una politica di rilascio ben consolidata, e marca con GA le versioni “da produzione”. Quindi, se non siete a conoscenza di qualche funzionalità particolare che c’è solo nella alpha di turno, se non siete dell’idea di vedervi cambiate sotto il naso funzioni e comportamenti, scaricate le versioni GA più recenti che trovate. Non esistono al momento “Setup” di NHibernate, mi risulta che ci fosse qualcosa in passato, comunque anche se trovaste qualcosa, vi suggerisco di evitarlo: NH consente di fare un private deploy, e avere traccia di quello che serve ci sarà utile in fase di consegna dell’applicativo sulle macchine di produzione. Scarichiamo quindi il file NHIbernate-2.1.2.GA-bin.zip. Scaricato il file il layout del contenuto è quello schematizzato qui sotto:

s2

Nella root, oltre ad un po’ di paccottiglia varia, troviamo due folder importanti che sono quelli che ci servono per mettere NHibernate all’opera: Required_Bins, and Required_For_LazyLoading.Tutte le dll contenute nel file required bin devono essere rilasciate insieme all’applicazione ( oltre a servire ovviamente  in fase di sviluppo :) ), mentre dalla cartella Required_For_LazyLoading si può scegliere quale folder distribuire in base a quale proxy generator si sceglie. Questo è un tema che si vedrà più avanti, per adesso basta sapere che NHibernate può derivare internamente alcune delle nostre classi quando decidiamo di avere delle entità “Lazy”, e questo è ottenuto tramite delle librerie esterne di generazione di classi “proxy”. Quale proxy generator usare dipende dalla configurazione, e quindi dalla stessa configurazione dipende quale folder distribuire. Negli esempi useremo LinFu. Diciamo che questa scelta è di scarso impatto sulla vita del vostro progetto, salvo in situazioni particolari, per cui per il momento possiamo andare avanti.

Importantissimi in fase di sviluppo sono i file nhibernate-mapping.xsd e nhibernate-configuration.xsd. Questi due file vi consentono di avere l’intellisense abilitato per i file di mapping e per la configurazione, e quindi sono assolutamente indispensabili. Malgrado siano finiti nella cartella required_bin, sono invece praticamente inutili in fase di distribuzione. Per attivare l’intellisense occorre copiare i due file suddetti nella cartella apposita di visual studio:

s3

Attenzione: può succedere che imporvvisamente Visual Studio smetta di fornire l'intellisense: tipicamente questo accade perchè ci sono più versioni dello stesso schema XML associate. Date un occhiata a questo post che spiega come risolvere il problema.

Inoltre, per sviluppare e per seguire gli esempi in questo tutorial occorrerà NUnit. Se ce lo avete già usate quello, altrimenti recuperate l’ultima versione dal sito ufficiale. Io di solito scarico il binario, non il setup, e lo scompatto sotto il folder programmi. Anche NUnit funziona con il semplice deploy Xcopy.

Ultima cosa prima di partire, lavorando con NHibernate ci sono alcune attività ripetitive che sarebbe bello evitare: consiglio di scaricare anche il tool hbm2net che ci consentirà di generare automaticamente le classi per nel corso del tutorial. Il tool si trova nel progetto NHContrib. Scaricate e scompattate lo zip in un folder, per esempio in C:\hbm2net. Il tool è un compilatore linea di comando, e sarà lanciato automaticamente da Visual Studio, ma perchè ciò avvenga occorre aggiungere la cartella in cui avete messo hbm2net nella variabile di ambiente PATH. per fare questo raggiungete le “proprietà del Sistema”:

s5

e poi aggiungere il path suddetto alla variabile PATH:

s6

 

Nella Parte2 vediamo come organizzare un progetto con NH.

Saturday, August 28, 2010 12:57:29 PM (GMT Daylight Time, UTC+01:00)  #    Comments [7] - Trackback
NHibernate | NHibernate Tutorial

Sunday, August 29, 2010 1:05:30 PM (GMT Daylight Time, UTC+01:00)
Bella inziativa, Felice.
Io sto iniziando a giocherellare con Nhibernate.
Lo trovo un ottimo strumento ma sto facendo difficoltà a capire i meccanismi di mapping many-to-one e many-to-many.
Sto leggendo un sacco di documentazione ma, per la maggior parte, si basa su esempi stupidi ... o troppo complessi.
Sarebbe bello poter seguire la modellazione di un'applicazione di gestione ordini.
Altra cosa che non riesco a capire è la differenza d'uso delle List, HashSet, ICollection quando si definiscono delle relazioni nel domain model.

grazie per l'ottimo lavoro.

Alberto
Alberto B.
Sunday, August 29, 2010 2:32:51 PM (GMT Daylight Time, UTC+01:00)
Grazie Alberto,
Sono contento che ti piaccia. In raltà mi sono reso conto che i tutorial danno di solito molte cose per scontate.
Diciamo che le reference, ovvero i <many-to-one/> <one to many/> saranno l'argomento della parte 3, sarebbe anche interessante mostrare come si possano avere collezioni anche non di entità e varie altre cosine.
Se seguirai gli altri post, quando ci sarà un po' più di carne al fuoco, e hai dei suggerimenti da dare, mi farebbe piacere, migliorerà sicuramente il lavoro.
Monday, August 30, 2010 3:10:13 PM (GMT Daylight Time, UTC+01:00)
Ciao Felice,

io sto sviluppando un'applicazioncina stupida che mi serve come esempio di studio per Nhibernate.
Sono partito da un modello simile a NorthWind perchè credo li dentro ci siano quasi tutte le casistiche che, mediamente, uno sviluppatore possa affrontare.
Sto utilizzando Fluent Nhibernate per il mappaggio domain model, ma solo per la generazione dei files HBM e la generazione del DB; al termine di questo processo sposto i files HBM nel mio progetto Nhibernate.
Ho preferito adottare questa soluzione perchè trovo più semplice capire il funzionamento fluent invece dei files XML, ma voglio mantenere il mio progetto più "puro" possibile.
Mi interesserebbe capire anche i meccanismi di cascading e le differenze tra di essi.

grazie

Alberto
Alberto B.
Tuesday, August 31, 2010 7:54:55 AM (GMT Daylight Time, UTC+01:00)
E lo so, all'inizio gli hbm spaventano un po', pure a me è successo lo stesso. Ti dico, con l'intellisense e quant'altro l'HBM diventa facilmente il tool principale, in quanto se vedi è il punto che contiene tutta l'informazione necessaria ( paradossalmente partendo dall HBM potresti fare uno scaffolding completo fino alla UI ).
Per gli argomenti che vuoi trattare ci arriverò, alla parte tre vorrei fare many-to-one e set.
Felice Pollano
Thursday, September 09, 2010 6:33:28 PM (GMT Daylight Time, UTC+01:00)
Bella e utilissima idea, Felice.
Seguirò sicuramente i prossimi posts della serie!
Nicola
Nicola
Saturday, October 01, 2011 8:38:19 PM (GMT Daylight Time, UTC+01:00)
ciao, molto interessante il tutorial..avrei però una domanda che forse è un po off-topic ma provo lo stesso: una applicazione sviluppata con nhibernate quando viene pubblicata deve essere installato qualcosa di particolare sul server?
grazie
cleaner
Sunday, October 02, 2011 7:44:07 AM (GMT Daylight Time, UTC+01:00)
Solo il framework.net, e ovviamante NH :) Non serve nessun setup, basta copiare la dll. Solo un po' di accortezze ti servono se devi girare in medium trust ( tipicamente shared hosting )
Felice Pollano
All comments require the approval of the site owner before being displayed.
OpenID
Please login with either your OpenID above, or your details below.
Name
E-mail
(will show your gravatar icon)
Home page

Comment (Some html is allowed: a@href@title, b, strike, strong) where the @ means "attribute." For example, you can use <a href="" title=""> or <blockquote cite="Scott">.  

Enter the code shown (prevents robots):

Live Comment Preview
My Stack Overflow
Contacts

Send mail to the author(s) E-mail

Tags
profile for Felice Pollano at Stack Overflow, Q&A for professional and enthusiast programmers
About the author/Disclaimer

Disclaimer
The opinions expressed herein are my own personal opinions and do not represent my employer's view in any way.

© Copyright 2012
Felice Pollano
Sign In
Statistics
Total Posts: 143
This Year: 3
This Month: 0
This Week: 0
Comments: 105
This blog visits
All Content © 2012, Felice Pollano
DasBlog theme 'Business' created by Christoph De Baene (delarou) and modified by Felice Pollano