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:
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:
Nel Model Browser rinominiamo il Complex Type “ComplexType1” appena creato in “Indirizzo” :
A questo punto, l’EDM Designer, dovrebbe assomigliare a qualcosa di questo tipo:
Visualizzando il Mapping Details, possiamo osservare come Visual Studio mappa le nostre entità alle tabelle del database:
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:
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: