在执行使用 NHibernate 进行数据访问操作的 NServiceBus 处理程序时,我看到一个错误,我不确定是否需要关注。
处理程序具有执行以下操作的代码:
using (var tx = Session.BeginTransaction())
{
var accountGroup = _groupRepository.FindByID(message.GroupID);
accountGroup.CreateAccount(message.AccountNumber);
tx.Commit();
}
当我分析这个过程时,我看到以下几行:
- 在具有隔离级别的分布式事务中登记会话:可序列化
- 以隔离级别开始事务:未指定
- SELECT ... FROM AccountGroups this_ WHERE this_.ID = 123
- 插入帐户...
- 提交事务
- 提交事务
当我调用 tx.Commit() 时,我的代码会生成第一条提交消息。第二个提交消息,我相信当我们离开处理程序的 Handle 方法并由 NServiceBus 调用时发生。第二次提交调用会在 NProf 中生成一个警报,指出“在多个线程中使用单个会话可能是一个错误”。
我不认为这是一个问题,因为当时确实没有什么可以提交的,但是我在这里做了一些不合适的事情吗?我确实想在事务中运行我的代码,但是当我这样做时,我会收到此警报。
有任何想法吗?