NHibernate PostUpdate事件监听器在数据库行更新之前运行

时间:2014-07-15 17:47:49

标签: nhibernate

在我更新某些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?还有另一个" hook"我可以用来排队邮件,确保发生更新?

1 个答案:

答案 0 :(得分:2)

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

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" />