Recientemente utilicé el método ApplyOriginalValues () para usar en un escenario de eliminación suave o eliminación lógica.
Estamos utilizando Entity Framework 4.1 y hemos implementado eliminaciones lógicas/suaves cuando el contexto guarda cambios.
El código siguiente comprueba si la entidad se elimina, luego verifica si implementa la interfaz adecuada. Si es así, cambiamos el estado de la entidad de eliminado a modificado y aplicamos los valores originales (entry.ApplyOriginalValues ()), y establecemos el flag borrado.
if (entry.State == EntityState.Deleted)
{
if (entry.Entity is IEnforceLogicalDelete)
{
IEnforceLogicalDelete delete = entry.Entity as IEnforceLogicalDelete;
ObjectStateManager.ChangeObjectState(entry.Entity, EntityState.Modified);
entry.ApplyOriginalValues(entry.Entity);
delete.IsDeleted = true;
}
}
Originalmente tuvimos un problema en el que las Propiedades de navegación se establecían en NULO o estaban vacías cuando se eliminaba lógicamente. El método ObjectContext.DeleteObject() marcaba todas las propiedades de navegación para su eliminación antes de que se desencadenara el evento Context.SavingChanges(). Al cambiar el estado de eliminado a modificado, las propiedades de la clave externa aún se borraron. Estaba tratando de encontrar un gancho para el método RevertDelete() (ILSpy es muy útil), pero ApplyOriginalValues () funcionó.
¡Excelente! Gracias. –