#104 - Persistere un grafo complesso di oggetti sul database con Entity Framework
Molto spesso capita di dover persistere un oggetto che ha altri oggetti collegati. Un tipico caso di questa situazione è quando si deve salvare un ordine sul database. Un ordine ha collegati sia i dettagli, sia il cliente che lo ha generato. Una serie di oggeti del genere viene definita grafo.
In Entity Framework persistere un grafo non è immediato in quanto esiste la regola secondo la quale se si aggiunge un oggetto al contesto per poi inserirlo nel database (tramite il metodo Add dell'ObjectContext), tutte le entità collegate vengono automaticamente aggiunte al contesto in stato di Added e quindi pronte per essere inserite sul database.
Per i dettagli dell'ordine la cosa non è un problema, ma per il cliente si in quanto non deve essere nuovamente inserito.
Per questo motivo bisogna prima fare l'Attach del cliente al contesto e poi associarlo all'ordine. In questo modo, il cliente viene aggiunto al contesto in stato di Unchanged e quindi non verrà fatta alcune operazione su di esso nel database.
Order o = new Order { Id = 1, Address = "via dei platani 14", ZipCode = "00100", City = "Rome" }; Customer c = new Customer { CustomerId = 1 }; using (var ctx = new DBContext()) { ctx.AddToOrder(o); ctx.AttachTo("Customers", c); o.Customer = c; ctx.SaveChanges(); }
Approfondimenti
-
.NET Framework 4.0 Beta 1: Parallel FX
-
Entity Framework 4.0 finalmente ha un buon designer
-
#142 - Usare LINQ to XML per creare dinamicamente un file XSD con dati presi da un database
-
#146 - Simulare la clausola SQL Exists con il metodo Any in LINQ to Entities
-
#164 - Eseguire una stored procedure tramite l'Entity Client di Entity Framework
-
Entity Framework e le performance con la Like
-
Strutturare un'applicazione reale con Entity Framework
-
#130 - Effettuare una query XPath con LINQ To XML
-
#978 - ASP.NET ed Entity Framework: Paginazione ed ordinamento con EntityDataSource
-
#108 - Sfruttare EntitySQL per lanciare una user defined function sul database
-
#152 - Scoprire le applicazioni senza la pagina di errore personalizzata con LINQ e Microsoft.Web.Administration
-
#170 - Caricare un grafo complesso di oggetti in una sola query con Entity Framework

















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.