【发布时间】:2011-06-10 06:02:14
【问题描述】:
我将 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; }
}
问题是,侦听器在删除实体时不会被触发,它只是删除它!
【问题讨论】:
标签: c# activerecord nhibernate cascade