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

NHibernate PostUpdate事件侦听器在数据库行更新之前运行,nhibernate,Nhibernate,我所处的情况是,在某些NHibernate实体更新后,我向RabbitMQ发送消息。理想情况下,我希望这些消息的使用者看到反映更新的实体版本 我决定尝试通过实现iposupdateeventlistener来引发事件,认为这将确保使用者看到最新的行,但我似乎有一个竞争条件,消息使用者有时会在数据库中更新实体行之前加载该实体 似乎表明代码在数据存储更新后运行,但情况似乎并非如此 我启动了SQLServerManagementStudio,NhProf,并进行了一些调试。我通过单步执行代码验证了我的

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

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

似乎表明代码在数据存储更新后运行,但情况似乎并非如此

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

我正在更新事务中的实体,代码如下

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

我是否误解或误用了
iposupdateeventlistener
?是否有另一个“钩子”可用于将消息排队,以确保已发生更新?

如果您正在使用事务,则我将使用以下事件来执行此操作:

提交后插入

提交后更新

提交后删除

配置示例:

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