Obtenir la liste des objets modifiés dans Entity Framework 7

.net c# dbcontext entity-framework entity-framework-core

Question

Je suis stumped - lors de la mise à niveau vers Entity Framework 7, je remplace généralement SaveChanges dans DbContext pour pouvoir obtenir une liste de tous les objets modifiés avant de la modifier. En fin de compte, j'ai un script qui se déclenche qui suit la version précédente dans une base de données. Dans Entity Framework 6, j'obtiendrais les modifications de modèle comme suit:

var oc = ((IObjectContextAdapter)this).ObjectContext;
var modifiedItems = oc.ObjectStateManager.GetObjectStateEntries(EntityState.Modified | EntityState.Deleted);

List<ObjectStateEntry> ModifiedObjlist = modifiedItems.ToList();

Cependant, maintenant que ObjectContext est supprimé dans Entity Framework 7, je suis bloqué. Comment puis-je obtenir dans Entity Framework 7 une liste des objets modifiés?

Réponse acceptée

Vous pouvez utiliser DbContext.ChangeTracker

var modifiedEntries = context.ChangeTracker
       .Entries()
       .Where(x => x.State == EntityState.Modified)
       .Select(x =>x.Entity)
       .ToList();

Réponse populaire

Le code de @dotctor peut ne pas fonctionner dans certains cas.

Dans certains cas, le suivi des modifications peut ne pas disposer des informations les plus récentes en ce qui concerne les entités gérées par le contexte, de sorte qu'une entité peut être modifiée / ajoutée / supprimée sans que le suivi des modifications en soit informé. Pour éviter ce cas, je voudrais envelopper le code de @dotctor dans la condition suivante:

if(context.ChangeTracker.HasChanges())
{
  ...
}


Résumé Microsoft de ChangeTracker.HasChanges () :

Vérifie si des entités nouvelles, supprimées ou modifiées sont suivies de sorte que ces modifications soient envoyées à la base de données si DbContext.SaveChanges ou DbContext.SaveChangesAsync est appelé. Notez que cette méthode appelle ChangeTracker.DetectChanges à moins que ChangeTracker.AutoDetectChangesEnabled ait été défini sur false.



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi