Domanda

C'è un modo per scoprire se ci sono modifiche non salvate nel mio contesto entità, in Entity Framework?

È stato utile?

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
scroll top