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