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(); }
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Ottimizzare il mapping di liste di tipi semplici con Entity Framework Core
Le novità di Entity Framework 8
Utilizzare HiLo per ottimizzare le insert in un database con Entity Framework
Utilizzare l'operatore GroupBy come ultima istruzione di una query LINQ in Entity Framework
Eseguire una GroupBy per entity in Entity Framework
I più letti di oggi
- Riordinare le righe di una GridView di ASP.NET con jQuery
- Creazione di un alarm con suono personalizzato con Windows Phone 7.1
- Utilizzare la session affinity con Azure Container Apps
- Blue-green deployment con Azure Web App e DevOps
- Ed infine anche il calendario :)
- Configurare la diagnostica di Azure attraverso Visual Studio
- Recuperare la data di creazione di un tag tramite una pipeline YAML di Azure DevOps
- Microsoft Security Bulletin MS05-002
- .NET Core e dispositivi IoT
- Eseguire attività pianificate con Azure Container Jobs