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?
Vous devez utiliser le DbContext
ChangeTracker
:
public bool HasUnsavedChanges()
{
return this.ChangeTracker.Entries().Any(e => e.State == EntityState.Added
|| e.State == EntityState.Modified
|| e.State == EntityState.Deleted);
}
Je sais que vous utilisez Entity Framework 5, cette réponse ne vous aidera pas. Mais cela peut aider les autres.
context.ChangeTracker.HasChanges()