【问题标题】:Nhibernate listeners does not work correctlyNhibernate 侦听器无法正常工作
【发布时间】:2010-01-26 13:25:23
【问题描述】:

我正在使用 NHibernate (v 2.1.0.4000) 并尝试使用事件侦听器进行更新操作。

我使用以下代码将侦听器添加到 Nhibernate 配置。

var configuration = new Configuration();    
configuration.SetListener(ListenerType.Update, new UpdateListener());  
_sessionFactory = configuration.BuildSessionFactory();

当我更新两个项目时,第一个项目没有到达侦听器的“PerformUpdate”功能。但是,在更新第二项时,正在调用该函数。

怎么会这样?

---已编辑---

在调试的时候发现在监听器的“OnSaveOrUpdate”上,正在执行如下代码:

object obj4 = session.PersistenceContext.UnproxyAndReassociate(@event.Entity);
@event.Entity = obj4;
@event.Entry = session.PersistenceContext.GetEntry(obj4);

我预计@event.Entry 为空,但它不为空并且状态为已加载。 调用 GetEntry 方法时应该真正发生什么?

【问题讨论】:

    标签: nhibernate listeners


    【解决方案1】:

    您可以为您的听众展示代码吗?您是否使用分析器来确保为这两个项目发布更新?如果项目没有更改,我可以看到这种情况发生,因此不会发布更新。

    编辑添加:我认为您使用的是较旧的侦听器实现。我建议使用new style(还有 ISaveOrUpdateEventListener)。您是否正在实施审计功能?

    我还建议您验证是否为第一项发布了更新。我知道您说过您确定它已更改,但您还应该检查 NH 是否认为已更改。在调试这样的东西时消除明显的问题总是一个好主意。

    【讨论】:

    • 我在监听器中的唯一函数如下: protected override void PerformUpdate(SaveOrUpdateEvent @event, object entity, IEntityPersister persister) { 这个函数没有被调用。我确定两个对象都已更改。
    • 我发现当我得到一个对象,进行更改并更新对象时,监听器中的performUpdate函数永远不会被调用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-14
    • 2017-06-08
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    相关资源
    最近更新 更多