Existe-t-il un moyen de savoir s'il existe des modifications non sauvegardées dans mon contexte d'entité, dans l'Entity Framework ?
Réponses
Trop de publicités?
Thaoden
Points
28
Cela pourrait fonctionner (si par changements vous entendez les 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;
Edit :
Amélioration du code :
bool changesMade = context.
ObjectStateManager.
GetObjectStateEntries(EntityState.Added |
EntityState.Deleted |
EntityState.Modified
).Any();
Yuck
Points
23174
Pour ceux d'entre vous qui utilisent 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 de résultats corrects.