gpt4 book ai didi

c# - 软删除 - ActiveRecord with Listeners

转载 作者:太空宇宙 更新时间:2023-11-03 14:23:31 26 4
gpt4 key购买 nike

我正在将 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; }
}

问题是,当删除它只是删除实体时,监听器不会被触发!

最佳答案

任何有兴趣的人...

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

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

关于c# - 软删除 - ActiveRecord with Listeners,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4710064/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com