gpt4 book ai didi

c# - 如何为更新和保存配置 NHIbernate 事件监听器?

转载 作者:行者123 更新时间:2023-12-04 06:01:12 24 4
gpt4 key购买 nike

继我之前的问题 How to implement LastUpdate in NHibernate Entities? .

我的数据库中的已审计表上有两列:

  • created datetime default getdate() not null (该行的创建日期)
  • lastUpdate datetime null (此行上次更新的日期时间)

  • 我想为 创建一个监听器仅更新 在 NHibernate 中,因为数据库引擎使用默认约束处理新记录。我尝试使用以下代码创建自定义监听器:
    public class CustomUpdateEventListener : DefaultSaveOrUpdateEventListener
    {
    protected override object PerformSaveOrUpdate(SaveOrUpdateEvent evt)
    {
    var entity = evt.Entity as IAuditableEntity;
    if (entity != null)
    {
    ProcessEntityBeforeUpdate(entity);
    }
    return base.PerformSaveOrUpdate(evt);
    }

    internal virtual void ProcessEntityBeforeUpdate(IAuditableEntity entity)
    {
    entity.UpdateDate = DateTime.Now;
    }
    }

    它适用于更新,但也适用于 Save事件(当我向数据库添加新行时)。我不希望它为新行触发。我尝试更改代码以收听 Update只有事件,但我无法解决。

    我试图将类更改为从 DefaultUpdateEventListener 继承但是没有 UpdateEvent (仅 SaveOrUpdate 事件或 PreUpdatePostUpdate )

    我想知道我是否应该使用 PreUpdate事件并使我的监听器继承自 DefaultUpdateEventListener但后来我不确定我需要覆盖哪种方法。没有 Update方法来覆盖。

    最佳答案

    您可以让您的类实现 IPreUpdateEventListener 接口(interface)(及其 OnPreUpdate 方法)。然后通过配置将您的类添加到 session 事件监听器中:

    NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration();
    cfg.EventListeners.PreUpdateEventListeners =
    new IPreUpdateEventListener[] {new YourEventListener()};
    sessionFactory = cfg.BuildSessionFactory();

    关于c# - 如何为更新和保存配置 NHIbernate 事件监听器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8872542/

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