Gibt es eine Möglichkeit herauszufinden, ob in meinem Entitätskontext im Entity Framework nicht gespeicherte Änderungen vorhanden sind?Überprüfen Sie, ob noch ausstehende Änderungen gespeichert werden.
Antwort
Dies könnte funktionieren (wenn durch Veränderungen bedeuten Sie, entfernt und modifizierte Einheiten hinzugefügt):
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();
+1 für im Allgemeinen auf der richtigen Spur, aber verwenden Sie' Any() ', nicht' Count()> 0'. –
Darn es - lesen Sie einfach Ihren Blogpost diesbezüglich heute! Danke;) – Yakimych
Beachten Sie, dass EF nicht prüft, ob der Wert wirklich anders ist (für den 'EntityState.Modified'). e.q. Wenn Sie einen Wert selbst ersetzen, gibt EF '1 modifiziertes Objekt' zurück. Sie müssen vorher prüfen, ob der Wert unterschiedlich ist. –
Für die von Ihnen Unter Verwendung von EF 4+ ist hier eine äquivalente Lösung als eine Verlängerungsmethode:
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 die Werte nicht als Bitmaske kombinieren können. Die Funktion GetObjectStateEntries()
hat die Logik für Sie verarbeitet, aber LINQ wird keine korrekten Ergebnisse liefern.
Beginnend mit EF 6 gibt es context.ChangeTracker.HasChanges()
.
Aktuellste Antwort. – Zapnologica
Ab 2016 ist dies die Antwort, IMHO. – ozgur
Dies ist jetzt die beste Antwort, wie andere bereits erwähnt haben. – Yokomoko
Wird context.savechanges() nicht automatisch überprüft? Grund ist, dass ich glaube, dass ein paar Leute versuchen werden, folgendes zu tun: 'if (db.ChangeTracker.HasChanges()) {erwarte db.SaveChangesAsync(); } ' – Zapnologica