【问题标题】:Soft delete - ActiveRecord with Listeners软删除 - 带有监听器的 ActiveRecord
【发布时间】: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


    【解决方案1】:

    致所有感兴趣的人...

    我找到了 nHibernate 配置并手动添加了监听器,然后它被触发了..

    foreach (NHibernate.Cfg.Configuration cfg in ActiveRecordMediator.GetSessionFactoryHolder().GetAllConfigurations())
            {
                cfg.SetListener(ListenerType.Delete, new SoftDeleteListener());
                cfg.AddAssembly(assem);
            }
    

    【讨论】:

    • 嗨,保罗。我已经注册了 Listener 并且它触发了...但是记录它没有更新...你能帮帮我吗?
    猜你喜欢
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    • 2014-05-30
    • 1970-01-01
    • 2018-05-15
    相关资源
    最近更新 更多