Überprüfen Sie, ob es irgendwelche ausstehenden Änderungen gespeichert werden sollen
Frage
Gibt es eine Möglichkeit, um herauszufinden, ob es nicht gespeicherte Änderungen in meiner Einheit Zusammenhang im Entity Framework?
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