71 votes

Vérifiez s'il y a des changements en attente à sauvegarder.

Existe-t-il un moyen de savoir s'il existe des modifications non sauvegardées dans mon contexte d'entité, dans l'Entity Framework ?

88voto

Thaoden Points 28

À partir de l'EF 6, il y a context.ChangeTracker.HasChanges() .

58voto

Yakimych Points 9312

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();

42voto

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X