Я только недавно использовал метод ApplyOriginalValues () для использования в сценарии мягкого или логического удаления.
Мы используем Entity Framework 4.1 и реализовали логическое / мягкое удаление, когда контекст сохраняет изменения.
Приведенный ниже код проверяет, удален ли объект, а затем проверяет, реализует ли он соответствующий интерфейс. Если это так, мы изменяем состояние объекта с удаленного на измененное и применяем исходные значения (entry.ApplyOriginalValues ()), а также устанавливаем флаг удаления.
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;
}
}
Первоначально у нас была проблема, когда свойства навигации устанавливались в NULL или были пустыми при логическом удалении. Метод ObjectContext.DeleteObject () помечал все свойства навигации для удаления до того, как было инициировано событие Context.SavingChanges (). При изменении состояния с удаленного на измененное свойства внешнего ключа по-прежнему стирались. Я пытался найти ловушку для метода RevertDelete () (ILSpy очень полезен), но ApplyOriginalValues () сработал.