create - Entity Framework 5-DbContext tiene cambios?
entity framework sql connection (2)
Deberías usar el DbContext
de ChangeTracker
:
public bool HasUnsavedChanges()
{
return this.ChangeTracker.Entries().Any(e => e.State == EntityState.Added
|| e.State == EntityState.Modified
|| e.State == EntityState.Deleted);
}
Estoy tratando de encontrar una manera de determinar si se han realizado cambios en el contexto de una base de datos (DbContext). Nota: estoy usando Visual Studio 2012 con Entity Framework 5 en un cuadro de Windows 7 de 64 bits.
Cuando solía usar ObjectContext en lugar de DbContext, podía hacer algo como:
public partial class MyObjectContext
{
public Boolean HasUnsavedChanges()
{
return (this.ObjectStateManager.GetObjectStateEntries(EntityState.Added | EntityState.Modified | EntityState.Deleted).Any());
}
}
Ahora que estoy usando DbContext, intenté hacer esto:
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());
}
}
El problema que tengo es que el método "HasUnsavedChanges ()" siempre devuelve "falso", incluso cuando sé que el contexto ha cambiado. ¿Alguien tiene alguna idea de lo que estoy haciendo mal?
Sé que mientras esté utilizando Entity Framework 5, esta respuesta no le ayudará. Pero puede ayudar a otros.
A partir de Entity Framework 6, puede verificar los cambios simplemente siguiendo la línea de código:
context.ChangeTracker.HasChanges()