Pregunta

¿Hay una manera de descubrir si hay cambios sin guardar en mi contexto entidad, en el marco de la entidad?

¿Fue útil?

Solución

Este trabajo podría (si los cambios te refieres a añadir, eliminar y modificar entidades):

bool changesMade = (context.ObjectStateManager.GetObjectStateEntries(EntityState.Added).Count() +
                    context.ObjectStateManager.GetObjectStateEntries(EntityState.Deleted).Count() +
                    context.ObjectStateManager.GetObjectStateEntries(EntityState.Modified).Count()
                    ) > 0;

Editar

código mejorada:

bool changesMade = context.
                   ObjectStateManager.
                   GetObjectStateEntries(EntityState.Added | 
                                         EntityState.Deleted | 
                                         EntityState.Modified
                                        ).Any();

Otros consejos

A partir de EF 6, hay context.ChangeTracker.HasChanges().

Para aquellos usando EF 4+, aquí es una solución equivalente como un método de extensión:

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);
    }
}

Tenga en cuenta que no es posible combinar los valores como una máscara de bits. La función GetObjectStateEntries() maneja la lógica para usted, pero LINQ no producirá resultados adecuados.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top