posts - 315, comments - 268, trackbacks - 15

My Links

News

View Pietro Libro's profile on LinkedIn

DomusDotNet
   DomusDotNet

Pietro Libro

Tag Cloud

Article Categories

Archives

Post Categories

Blogs amici

Links

Entity Framework in .NET 4.0 – Model First

 

E’ da qualche tempo che avrei voluto scrivere qualche post a riguardo della nuova versione dell’Entity Framework, ma per vari motivi ho sempre dovuto rimandare. Finalmente, il momento è arrivato. Durante, il corso dell’anno precedente mi sono trovato ad utilizzare Entity Framework in molti progetti, di piccola e media complessità e devo essere sincero: nonostante i problemi di gioventù (testing ad esempio…), alla fine, ho avuto modo di apprezzare, soprattutto in fase di manutenzione del software, il tempo risparmiato, se dovessi paragonare la stessa tipologia di lavoro utilizzando DataSet tipizzati invece di “Entità”. E’ vero anche, che al fine di disaccoppiare il più possibile i layer logici, è stato necessario dover scrivere (in alcuni casi, non poco) codice per gestire correttamente la situazione, e non dover portarsi dietro sia a livello di progetto che a runtime, tutti i vari riferimenti necessari ai vari EntityObject per funzionare (la situazione potrebbe complicarsi se il DAL si trovasse su un tier completamente diverso da quello della BLL). Vediamo una delle nuove funzionalità introdotte con la nuova versione di Entity Framework: la possibilità di utilizzare un approccio Model First: la generazione concettuale del modello prima del modello di storage (il database in questo caso).

Supponiamo, di voler creare una semplice applicazione per la gestione di un’anagrafica composta da persone ed enti. Le specifiche della nostra applicazione indicano che una persona può essere collegata a più società e che una società può avere più persone, una tipica relazione molti-a-molti. In un approccio data-driven, a questo punto, la prima cosa che faremmo sarebbe aprire (ad esempio) SQL Server Management Studio  e progettare le  tabelle con le varie relazioni, poi aprire Visual Studio, e nel caso dovessimo utilizzare Entity Framework aggiungere al nostro progetto un file con estensione .edmx. Utilizzando un approccio Model-First, apriamo immediatamente Visual Studio 2010 Beta 2 e creiamo un nuovo progetto console (ad esempio) che potremmo chiamare con molta fantasia EF2Features:

image

Aggiungiamo al nostro progetto un nuovo item di tipo ADO.NET Entity Data Model che potremmo chiamare PersoneEntiModel (di conseguenza verrà generato il file PersoneSocietaModel.edmx)

image

Dopo aver fatto click su “Add” verrà visualizzato un Wizard attraverso il quale possiamo scegliere se creare un modello a partire da un database o  partire da un modello vuoto, scegliamo la seconda opzione:

image

Bene, a questo punto, possiamo trascinare dalla casella degli strumenti presente (generalmente) a sinistra di Visual Studio due item Entity nel nostro designer, che chiameremo Persona ed Ente, assegnando rispettivamente le proprietà Nome, Cognome, ed Indirizzo a Persona, Nome e Sigla ad Ente. Per default le due entità presentano una proprietà Id di tipo Int32, le quali sono anche chiavi (Entity Key). Piccola osservazione: la proprietà StoreGeneratedPattern è per default impostata su none: questo vuol dire che il valore della chiave non verrà in alcun caso (insert or update) recuperato dal server quando verrà chiamato il metodo SaveChanges. Impostiamo invece il valore della proprietà su Identity: in questo caso si assume che il valore della chiave verrà recuperato durante il primo inserimento, successivamente si assume che il valore non cambierà. Maggiori dettagli sono disponibili su: http://msdn.microsoft.com/en-us/library/bb738536(VS.100).aspx

image

A questo punto non ci resta che creare l’associazione tra Persona ed Ente: sempre dalla Toolbox, selezioniamo l’item Association e colleghiamo le nostre due entità, specificando, tramite la finestra delle proprietà, relativamente a Persona ed Ente che agli estremi dell’associazione troveremo una collezione di oggetti, secondo del verso di lettura, di tipo Persona o Ente. 

image image

A questo punto non ci resta che creare il nostro database. In “Server Explorer” facciamo click su “Data Connections” e poi “Create New SQL Server Database…” (in alternativa possiamo utilizzare i tools a riga di comando….):

image image

Dopo aver create il nostro database, passiamo alla generazione dello script da utilizzare per la creazione: tasto destro del mouse in un punto del  designer, e dal menu contestuale “Generate Database Script from Model….”:

image

Visual Studio genererà uno script DDL (Database Defintion Lanaguage) da utilizzare per creare le tabelle del nostro DB:

image

Dopo aver premuto Finish, nel nostro progetto verrà aggiunto il file DDL (PersoneEntiModel.edmx.sql) generato che può essere eseguito: direttamente da Visual Studio, tramite SQL Server Management Studio o tool da rigo di comando. In questo caso ho optato per la prima possibilità. Dopo l’esecuzione dello script, espandendo il nodo tables nel “Server Explorer”, otteniamo quanto segue:

image 

Notiamo che per soddisfare la relazione molti-a-molti tra Persona ed Ente è stata generata una terza tabella PersoneEnte (tabella d’associazione). Per verificare ulteriormente il risultato prodotto possiamo creare un nuovo diagramma per meglio visualizzare la relazione creata tra le tabelle:

image

Soddisfacendo gli obiettivi preposti.

Questa è solo una delle novità introdotte con la nuova versione dell’ Entity Framework V.2, tra cui: “POCO Templates” e supporto per il Test-Driven-Development.

Print | posted on sabato 2 gennaio 2010 13:57 | Filed Under [ .Net Framework 4.0 ]

Feedback

Gravatar

# re: Entity Framework 2 – Model First

Il nome corretto sarebbe Entity Framework 4.0....(mi sa)
:)
02/01/2010 15:43 | Giancarlo Sudano
Gravatar

# re: Entity Framework in .NET 4.0 – Model First

Per tagliare la testa al toro e ricontrollando sul Blog ADO.NET ho modificato il titolo il EF in .NET 4.0. Da qualche parte avevo letto EFv2. Grazie per la segnalazione.
02/01/2010 16:10 | Pietro Libro
Gravatar

# re: Entity Framework in .NET 4.0 – Model First

Finalmente qualcuno che ha commentato correttamente il ruolo di EF1.0: ANDARSENE DAI DATASET! Bravo! Per crescere e raggiungere NHibernate c'è tempo.
Anche io mi metto a riscrivere le entità che devono viaggiare attraverso i livelli e quindi sono doppioni di quelli creati da EF1.0 (derivati da EntityObject). A parte le prestazioni (direi spesso "ininfluenti" in applicazioni medio/piccole - e sono tante!) il problema della duplicazione si può risolvere con la Code Generation (sto imparando ad usare T4...) per evitare di fare coding a mano.
E ora, come cominci a scrivere, EF4.0 è arrivato!
Urrà! Aspetto altri tuoi post sull'argomento.
03/01/2010 01:15 | Marco Parenzan
Gravatar

# re: Entity Framework in .NET 4.0 – Model First

Grazie. Dovrei riuscire a postare in settimana.
03/01/2010 10:54 | Pietro Libro
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET