La classe DbContext di Entity Framework Core espone la proprietà ChangeTracker di tipo ChangeTracker. Questa classe mette a disposizione il metodo TrackGraph che permette di attaccare un oggetto al contesto e di avere un callback per ogni oggetto complesso che questo referenzia così da poter impostare anche lo stato degli oggetti collegati.
Per fare un esempio, supponiamo di avere un ordine a cui abbiamo collegati un cliente e i dettagli. Se invochiamo il metodo Add del contesto, tutti gli oggetti collegati all'ordine vengono impostati in stato Added e verranno quindi inseriti quando invochiamo il metodo SaveChanges. Se per l'ordine e i dettagli questo è il comportamento desiderato, per il cliente invece dovremmo poter impostare lo stato di Unchanged. Con il metodo TrackGraph possiamo ottenere questo risultato usando il seguente codice.
var order = new Order { ... };
context.ChangeTracker.TrackGraph(order , e => {
if (e.Entry.IsKeySet)
{
e.Entry.State = EntityState.Unchanged;
}
else
{
e.Entry.State = EntityState.Added;
}
});Il primo parametro del metodo accetta l'oggetto principale (l'ordine nel nostro caso). Il secondo parametro è una funzione che viene invocata per l'oggetto principale e per ogni oggetto a esso collegato (nel nostro caso per il cliente o per ogni ordine). Se la chiave primaria è impostata (come sicuramente lo è per il cliente), l'oggetto viene impostato in stato di Unchanged, in caso contrario (come per l'ordine e i dettagli) viene impostato in stato di Added.
Ovviamente questa è la logica usata nel nostro esempio, ma può essere completamente personalizzata in base alle necessità.
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
Controllare la velocità di spostamento su una pagina HTML
Utilizzare i variable font nel CSS
Il nuovo controllo Range di Blazor 9
Utilizzare l nesting nativo dei CSS
Gestione delle scrollbar dinamiche in HTML e CSS
Gestire eccezioni nei plugin di Semantic Kernel in ASP.NET Core Web API
Supportare la crittografia di ASP.NET Core con Azure Container App
Gestire gli accessi con Token su Azure Container Registry
Disabilitare le run concorrenti di una pipeline di Azure DevOps
Documentare i servizi REST con Swagger e OpenAPI con .NET 9
Esporre un server MCP con Azure API Management
Ridurre il reflow ottimizzando il CSS


