Vérifiez s'il y a des modifications en attente à sauver
Question
Y at-il un moyen de savoir s'il y a des modifications non enregistrées dans mon contexte de l'entité, dans le Entity Framework?
La solution
Ce travail pourrait (si par modifications ajoutée moyenne, les entités retirées et modifiées):
bool changesMade = (context.ObjectStateManager.GetObjectStateEntries(EntityState.Added).Count() +
context.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted).Count() +
context.ObjectStateManager.GetObjectStateEntries(EntityState.Modified).Count()
) > 0;
Modifier
Optimisation du code:
bool changesMade = context.
ObjectStateManager.
GetObjectStateEntries(EntityState.Added |
EntityState.Deleted |
EntityState.Modified
).Any();
Autres conseils
A partir de 6 EF, il est context.ChangeTracker.HasChanges()
.
Pour ceux utilisant EF 4+, voici une solution équivalente en tant que méthode d'extension:
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);
}
}
Notez que vous ne pouvez pas combiner les valeurs comme un masque de bits. La fonction GetObjectStateEntries()
a géré la logique pour vous, mais LINQ ne produira pas des résultats corrects.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow