Verificare se ci sono modifiche in sospeso per essere salvati
Domanda
C'è un modo per scoprire se ci sono modifiche non salvate nel mio contesto entità, in Entity Framework?
Soluzione
Questo lavoro potrebbe (se da cambiamenti intendi aggiunto, rimosso e modificato entità):
bool changesMade = (context.ObjectStateManager.GetObjectStateEntries(EntityState.Added).Count() +
context.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted).Count() +
context.ObjectStateManager.GetObjectStateEntries(EntityState.Modified).Count()
) > 0;
Modifica
Codice migliorata:
bool changesMade = context.
ObjectStateManager.
GetObjectStateEntries(EntityState.Added |
EntityState.Deleted |
EntityState.Modified
).Any();
Altri suggerimenti
A partire da EF 6, v'è context.ChangeTracker.HasChanges()
.
Per quelli di voi che usano EF 4+, qui è una soluzione equivalente come un metodo di estensione:
public static class DbContextExtensions {
public static Boolean HasPendingChanges(this DbContext context) {
return context.ChangeTracker.Entries()
.Any(e => e.State == EntityState.Added
|| e.State == EntityState.Deleted
|| e.State == EntityState.Modified);
}
}
Si noti che non è possibile combinare i valori come una maschera di bit. La funzione di GetObjectStateEntries()
gestito la logica per voi, ma LINQ non produrrà risultati corretti.
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow