Existe-t-il un moyen de savoir s'il y a des modifications non enregistrées dans mon contexte d'entité, dans Entity Framework?
Cela pourrait fonctionner (si par des changements vous entendez des entités ajoutées, supprimé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:
Code amélioré:
bool changesMade = context.
ObjectStateManager.
GetObjectStateEntries(EntityState.Added |
EntityState.Deleted |
EntityState.Modified
).Any();
À partir d'EF 6, il y a context.ChangeTracker.HasChanges()
.
Pour ceux d'entre vous qui utilisent EF 4+, voici une solution équivalente comme 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 en tant que masque de bits. La fonction GetObjectStateEntries()
a géré la logique pour vous, mais LINQ ne produira pas de résultats appropriés.