Я использую ActiveRecord с nHibernate и пытаюсь реализовать мягкое удаление, чтобы объекты помечались как «IsDeleted», а не фактически удаляли их.Мне, очевидно, нужна опция каскада для работы.
[assembly: AddEventListener(typeof(MyNamespace.SoftDeleteListener))] namespace MyNamespace { public class SoftDeleteListener : DefaultDeleteEventListener
{
protected override void DeleteEntity(IEventSource session, object entity, EntityEntry entityEntry, bool isCascadeDeleteEnabled,
IEntityPersister persister, ISet transientEntities)
{
if (entity is IPermanentRecord)
{
((IPermanentRecord)entity).IsDeleted = true;
this.CascadeBeforeDelete(session, persister, entity,
entityEntry, transientEntities);
this.CascadeAfterDelete(session, persister, entity, transientEntities);
}
else
{
base.DeleteEntity(session, entity, entityEntry,
isCascadeDeleteEnabled, persister, transientEntities);
}
}
}
}
Моя сущность - "Продукт" Реализует
interface IPermanentRecord
{
bool IsDeleted { get; set; }
}
Проблема в том, что слушательбыть уволенным при удалении объекта, он просто удаляет его!