Lors de l'exécution d'un gestionnaire NServiceBus qui utilise NHibernate pour ses opérations d'accès aux données, je vois une erreur que je ne suis pas sûr si je dois être concernés par.« En utilisant une seule session dans plusieurs threads est probablement un bug » erreur dans NHProf lors de l'utilisation NServiceBus
Le gestionnaire a le code qui fait quelque chose comme ceci:
using (var tx = Session.BeginTransaction())
{
var accountGroup = _groupRepository.FindByID(message.GroupID);
accountGroup.CreateAccount(message.AccountNumber);
tx.Commit();
}
Quand je profil ce processus, je vois les lignes suivantes:
- session, engagé dans la transaction distribuée avec le niveau d'isolement: Serializable
- Début de la transaction avec le niveau d'isolement: Non spécifié
- SELECT ... FROM AccountGroups this_ OERE this_.ID = 123
- INSERT INTO comptes ...
- commit transaction
- commit transaction
Le premier message de validation est généré par mon code quand je l'appelle tx.Commit(). Le deuxième message de validation, je crois se produit lorsque nous quittons la méthode Handle du gestionnaire et est appelée par NServiceBus. Ce second appel à valider génère une alerte dans NHProf qui stipule que "Utiliser une seule session dans plusieurs threads est probablement un bug".
Je ne pense pas que ce soit un problème, car il n'y a vraiment rien à engager à ce moment-là, mais je suis en train de faire quelques-uns ici inapproprié? Je veux exécuter mon code dans une transaction, mais quand je le fais, je reçois cette alerte.
Des idées?
Juste une remarque: NSB vous enveloppe manipuler avec un TransactionScope. Ceci + le fait que nhibernate supporte System.Transactions vous rend redondant Session.BeginTransaction(). Vous devriez être capable de l'enlever avec n'importe quel impact sur la cohérence. –