Czy istnieje sposób sprawdzenia, czy nie są niezapisane zmiany w kontekście mojej jednostki, w Entity Framework?Sprawdź, czy są jakieś oczekujące zmiany do zapisania.
Odpowiedz
To może działać (jeśli zmiany masz na myśli dodawać, usuwać i modyfikować jednostki):
bool changesMade = (context.ObjectStateManager.GetObjectStateEntries(EntityState.Added).Count() +
context.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted).Count() +
context.ObjectStateManager.GetObjectStateEntries(EntityState.Modified).Count()
) > 0;
Edit:
Ulepszony kod:
bool changesMade = context.
ObjectStateManager.
GetObjectStateEntries(EntityState.Added |
EntityState.Deleted |
EntityState.Modified
).Any();
+1 za bycie ogólnie na właściwej ścieżce, ale używaj' Any() ', a nie' Count()> 0'. –
Pocałuj - po prostu przeczytaj swój blog na ten temat już dziś! Dzięki;) – Yakimych
Należy zauważyć, że EF nie sprawdza, czy wartość jest naprawdę inna (dla 'EntityState.Modified'). e.q. jeśli zastąpisz wartość samodzielnie, EF zwróci "1 zmodyfikowany obiekt". Musisz sprawdzić wcześniej, czy wartość jest inna. –
Dla tych z Was, przy użyciu EF 4+, tutaj jest równoważne rozwiązanie jako metoda rozszerzenia:
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);
}
}
Należy pamiętać, że nie można łączyć wartości jako maski bitowej. Funkcja GetObjectStateEntries()
obsłużyła dla ciebie logikę, ale LINQ nie przyniesie właściwych wyników.
Począwszy od wersji EF 6, istnieje context.ChangeTracker.HasChanges()
.
Najbardziej aktualna odpowiedź. – Zapnologica
Od 2016 roku to jest odpowiedź, IMHO. – ozgur
To jest teraz najlepsza odpowiedź, o której wspominali inni. – Yokomoko
- 1. Sprawdź oczekujące migracje Django
- 2. Regały oczekujące Zmiany w TFS
- 3. Czy są jakieś narzędzia podobne do intellitrace
- 4. Czy są jakieś alternatywy do SDK BoxedApp?
- 5. Czy są jakieś .NET ESB?
- 6. Shelve Oczekujące zmiany w serwerze Team Foundation
- 7. Czy są jakieś add_days w datach ruby?
- 8. Czy są jakieś "anomalie" porównania zmiennoprzecinkowe?
- 9. Sprawdź, czy słuchawki są podłączone
- 10. Czy są jakieś bezpłatne edytory XSL-FO?
- 11. Czy są jakieś powszechnie stosowane implementacje IQueryable?
- 12. Czy są dostępne jakieś dobre geoparsery otwarte?
- 13. Czy są dostępne jakieś implementacje filtrów Bloomiera?
- 14. Czy są tam jakieś narzędzia kodu DRYer?
- 15. Czy dostępne są jakieś biblioteki ccTalk?
- 16. Czy są jakieś formatery kodu Sass?
- 17. Czy są jakieś standardy kodowania dla JavaScript?
- 18. Czy są jakieś alternatywne prace Cron?
- 19. Czy są jakieś implementacje multiset dla .Net?
- 20. Czy są jakieś książki o Lucene.NET
- 21. Czy są jakieś alternatywy dla py2exe?
- 22. Czy są jakieś cms dla Rails 4?
- 23. Czy są jakieś przykłady kompilatorów JIT wielowątkowych?
- 24. Czy są jakieś alternatywne edytory plików .m?
- 25. Czy są jakieś dobre alternatywy dla WebSVN?
- 26. Czy są jakieś "wzorce projektowe" w C?
- 27. Czy są jakieś standardy zwane GUI?
- 28. Czy są dostępne jakieś godne alternatywy CSLA?
- 29. Czy są jakieś bezpłatne biblioteki klasy OpenCV?
- 30. Czy są jakieś podcasty o Delphi?
Czy funkcja context.savechanges() nie sprawdza automatycznie tego? Powodem, dla którego pytam, jest to, że myślę, że kilka osób spróbuje wykonać następujące czynności: 'if (db.ChangeTracker.HasChanges()) {czeka na db.SaveChangesAsync(); } ' – Zapnologica