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?

Était-ce utile?

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
scroll top