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 4: POCO e Complex Type

 

Proviamo a modificare il Data Model precedente , per testare il supporto di  Visual Studio 2010 ai Complex Type. Eliminiamo dall’entità Persona la proprietà Indirizzo, sostituendola con le proprietà Via, NumeroCivico, Comune e Provincia di tipo stringa:

image

Le proprietà elencate sono le candidate per il tipo complesso Indirizzo. A differenza della versione precedente di Entity Framework, in cui bisogna modificare a mano il codice del file .edmx, Visual Studio 2010 ci viene incontro: selezioniamo con il mouse le proprietà precedentemente citate tenendo premuto il tasto CTRL, premiamo il tasto destro del mouse e scegliamo “Refactor into New Complex Type”, come in figura:

image

Nel Model Browser rinominiamo il Complex Type “ComplexType1” appena creato in “Indirizzo” :

image

A questo punto, l’EDM Designer, dovrebbe assomigliare a qualcosa di questo tipo:

image

Visualizzando il Mapping Details, possiamo osservare come Visual Studio mappa le nostre entità alle tabelle del database:

image 

Per avere un’applicazione completa, non ci resta che modificare le classi POCO: selezioniamo il progetto “EF4FeaturesPOCO” ed aggiungiamo una nuova classe Indirizzo:


public class Indirizzo
{
    public string Via { get; set; }
    public string Comune { get; set; }
    public string NumeroCivico {get;set;}
    public string Provincia { get; set; }
}

e modifichiamo il codice della classe Persona:


public class Persona 
{ 
    public int Id { get; set; } 
    public string Nome { get; set; } 
    public string Cognome { get; set; } 
    public Indirizzo Indirizzo { get; set; } 
    public List<Ente> Enti { get; set; } 
}

Non ci resta che modificare il codice per l’inserimento di una nuova persona:


EF4FeaturesData.PersonaManager manager = new EF4FeaturesData.PersonaManager(); 
Persona p = new Persona(); 
p.Enti = new List<Ente>(); 
p.Cognome = "PIETRO"; 
p.Nome = "LIBRO"; 
 
p.Indirizzo = new Indirizzo() 
{ 
    Comune = "ROMA", 
    NumeroCivico = "s.n.c.", 
    Provincia = "RM", 
    Via = "Via Una Via Di Roma" 
}; 
 
Ente e = new Ente(); 
e.Persone = new List<Persona>(); 
e.Denominazione = "NUOVA SOCIETA' s.r.l."; 
e.Sigla = "NS"; 
 
manager.Aggiungi(p, e);           
 
Console.WriteLine("Nel DB sono presenti le seguenti persone:"); 
 
foreach (Persona per in manager.OttieniElencoPersone()) 
{                
    Console.WriteLine("{0} {1} ID={2}", per.Nome, per.Cognome, per.Id); 
    Console.WriteLine("Via: {0}", per.Indirizzo.Via); 
    Console.WriteLine("Comune: {0}", per.Indirizzo.Comune); 
    Console.WriteLine("Provincia: {0}", per.Indirizzo.Provincia); 
    Console.WriteLine("Appartiene ai seguenti enti:"); 
    foreach (Ente ent in per.Enti) 
    { 
        Console.WriteLine("===>{0}", ent.Denominazione); 
    } 
}

Eseguendo l’applicazione, otteniamo:

image

Piccola osservazione: un secondo modo possibile (oltre al codice a manina) per aggiungere un Complex Type al nostro modello, è quello di selezionare “Add\Complex Type” dal menu contestuale visualizzabile tramite click del testo destro del mouse dell’EDM designer:

image

Print | posted on Sunday, January 10, 2010 6:57 PM | Filed Under [ .Net Framework 4.0 ]

Feedback

Gravatar

# re: Entity Framework 4: POCO e Complex Type

Mi sa che giunta l'ora di lasciare LinqToSQL e iniziare ad usare EF ... :-D
1/12/2010 7:03 AM | Nicolò Carandini
Gravatar

# re: Entity Framework 4: POCO e Complex Type

Devo essere sincero, non ho mai utilizzato Linq To SQL. Mi è sempre sembrato troppo limitativo.
1/12/2010 9:40 AM | Pietro Libro
Gravatar

# re: Entity Framework 4: POCO e Complex Type

Grazie per l'articolo. Mi pare che finalmente con questa versione di EF si possa cominciare a lavorare in modo egregio.
1/14/2010 11:30 PM | Marco I.
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET