【问题标题】:NHibernate PostUpdate Event Listener Runs Before Database Row UpdateNHibernate PostUpdate 事件侦听器在数据库行更新之前运行
【发布时间】:2014-07-18 04:02:32
【问题描述】:

在某些 NHibernate 实体更新后,我会向 RabbitMQ 发送消息。理想情况下,我希望这些消息的消费者看到反映更新的实体版本。

我决定尝试通过实现 IPostUpdateEventListener 来引发事件,认为这将确保消费者看到最新的行,但我似乎有一个竞争条件,消息消费者有时在实体的行在数据库中更新之前加载实体

The documentation on the IPostUpdateEventListener interface 似乎表明代码在数据存储更新后运行,但情况似乎并非如此。

我启动了 Sql Server Management Studio,NhProf,并进行了一些调试。我通过单步执行代码验证了我的OnPostUpdate 代码运行之前数据库中的实体行被更新。

我正在更新事务中的实体,使用类似这样的代码...

using(var transaction = session.BeginTransaction()) {
    session.SaveOrUpdate(entity);
    transaction.Commit();
}

我是误会还是误用了IPostUpdateEventListener?我可以使用另一个“钩子”将消息排入队列,以确保发生更新吗?

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

    如果您使用事务,那么我使用以下事件来执行此操作:

    post-commit-insert
    post-commit-update
    post-commit-delete

    配置示例:

    <listener class="yournamespace.youreventhandler, yournamespace" type="post-commit-insert" />
    <listener class="yournamespace.youreventhandler, yournamespace" type="post-commit-update" />
    <listener class="yournamespace.youreventhandler, yournamespace" type="post-commit-delete" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 2013-12-25
      • 2013-06-27
      • 2015-07-11
      • 2019-01-02
      • 1970-01-01
      • 2012-02-10
      相关资源
      最近更新 更多