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
Esporre tool MCP con Azure Functions
.NET Aspire per applicazioni distribuite
Ridurre il reflow cambiando il CSS
Collegare applicazioni server e client con .NET Aspire
Potenziare la ricerca su Cosmos DB con Full Text Search
Usare i settings di serializzazione/deserializzazione di System.Text.Json di ASP.NET all'interno di un'applicazione non web
Definire il colore di una scrollbar HTML tramite CSS
Rendere le variabili read-only in una pipeline di Azure DevOps
Utilizzare Locust con Azure Load Testing
Escludere alcuni file da GitHub Copilot
Controllare la telemetria con .NET Aspire
Testare il failover sulle region in Azure Storage
I più letti di oggi
- The Agentic Day - Milano
- .NET Conference Italia 2025 - Milano
- Usare ASP.NET Identity per autenticare i client di un'applicazione ASP.NET Web API
- UX e UI nelle applicazioni Windows e Windows Phone
- Data access with LiteDB in Blazor
- Blazor PWA e Offline-First
- .NET per sviluppatori AWS
- Modernizzare le applicazioni WPF e Windows Forms con Blazor


