web-dev-qa-db-fra.com

Entity Framework 5 - DbContext a des changements?

J'essaie de trouver un moyen de déterminer si des modifications ont été apportées à un contexte de base de données (DbContext). Remarque: J'utilise Visual Studio 2012 avec Entity Framework 5 sur une boîte Windows 7, 64 bits.

À l'époque où j'utilisais ObjectContext au lieu de DbContext, je pouvais faire quelque chose comme:

public partial class MyObjectContext
{
    public Boolean HasUnsavedChanges()
    {
        return (this.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Deleted).Any());
    }
}

Maintenant que j'utilise DbContext, j'ai essayé de faire ceci:

public partial class MyDbContext
{
    public ObjectContext ObjectContext()
    {
        return (this as IObjectContextAdapter).ObjectContext;
    }

    public Boolean HasUnsavedChanges()
    {
        return (this.ObjectContext().ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Deleted).Any());
    }
}

Le problème que j'ai est que la méthode "HasUnsavedChanges ()" renvoie toujours "false" même lorsque je sais pertinemment que le contexte a été changé. Quelqu'un at-il une idée de ce que je fais mal?

33
HydroPowerDeveloper

Vous devez utiliser le DbContextChangeTracker:

 public bool HasUnsavedChanges()
 {
    return this.ChangeTracker.Entries().Any(e => e.State == EntityState.Added
                                              || e.State == EntityState.Modified
                                              || e.State == EntityState.Deleted);
 }
43
Mark Oreta

Je sais que vous utilisez Entity Framework 5, cette réponse ne vous aidera pas. Mais cela peut aider les autres.

À partir d'Entity Framework 6, vous pouvez vérifier les modifications simplement en suivant la ligne de code:

context.ChangeTracker.HasChanges()
32
Emdadul Sawon