データ アクセス操作に NHibernate を使用する NServiceBus ハンドラを実行すると、注意する必要があるかどうかわからないエラーが表示されます。
ハンドラーには、次のようなコードがあります。
using (var tx = Session.BeginTransaction())
{
var accountGroup = _groupRepository.FindByID(message.GroupID);
accountGroup.CreateAccount(message.AccountNumber);
tx.Commit();
}
このプロセスをプロファイリングすると、次の行が表示されます。
- 分離レベル: Serializable の分散トランザクションに登録されたセッション
- 分離レベルでトランザクションを開始: 未指定
- SELECT ... FROM AccountGroups this_ WHERE this_.ID = 123
- アカウントに挿入...
- トランザクションをコミットする
- トランザクションをコミットする
tx.Commit() を呼び出すと、最初のコミット メッセージがコードによって生成されます。2 番目のコミット メッセージは、ハンドラーの Handle メソッドを終了したときに発生し、NServiceBus によって呼び出されると思います。この commit の 2 回目の呼び出しにより、NHProf で「複数のスレッドで単一のセッションを使用することはおそらくバグです」というアラートが生成されます。
その時点でコミットすることは本当に何もないので、これは問題ではないと思いますが、ここで不適切なことをしていますか? トランザクション内でコードを実行したいのですが、実行するとこのアラートが表示されます。
何か案は?