Frage

Gibt es eine Möglichkeit, um herauszufinden, ob es nicht gespeicherte Änderungen in meiner Einheit Zusammenhang im Entity Framework?

War es hilfreich?

Lösung

Dies könnte funktionieren (wenn durch Änderungen hinzugefügt bedeuten, entfernt und modifizierte Einheiten):

bool changesMade = (context.ObjectStateManager.GetObjectStateEntries(EntityState.Added).Count() +
                    context.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted).Count() +
                    context.ObjectStateManager.GetObjectStateEntries(EntityState.Modified).Count()
                    ) > 0;

Edit:

Verbesserte Code:

bool changesMade = context.
                   ObjectStateManager.
                   GetObjectStateEntries(EntityState.Added | 
                                         EntityState.Deleted | 
                                         EntityState.Modified
                                        ).Any();

Andere Tipps

Beginnend mit EF 6 gibt es context.ChangeTracker.HasChanges().

Für die von Ihnen EF 4+ verwenden, hier ist eine äquivalente Lösung als Erweiterung Methode:

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);
    }
}

Beachten Sie, dass Sie nicht die Werte als Bitmaske kombinieren. Die Funktion GetObjectStateEntries() behandelt die Logik für Sie, aber LINQ produzieren nicht korrekte Ergebnisse.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top