Nous définissons le niveau d'isolation sur Non confirmé en lecture, comme indiqué ci-dessous.
TransactionOptions to = new TransactionOptions();
to.IsolationLevel = System.Transactions.IsolationLevel.ReadUncommitted;
using (TransactionScope transaction = new TransactionScope(TransactionScopeOption.RequiresNew, to))
{
// Faire des choses
transaction.Complete();
}
Le problème est qu'une fois que la connexion est renvoyée au pool, elle n'est pas réinitialisée au niveau d'isolation par défaut, ce qui, je comprends, est intentionnel (Le niveau d'isolation de transaction n'est pas réinitialisé lorsque vous réutilisez une connexion depuis le pool de connexions). Ainsi, lorsque la transaction se termine, tout ce qui réutilise cette connexion depuis le pool sera exécuté avec le niveau d'isolation en lecture non confirmée.
J'ai essayé d'appeler "SET TRANSACTION ISOLATION LEVEL READ COMMITTED"
en utilisant un SqlCommand, mais il n'y a aucun moyen de garantir qu'il réutilisera la même connexion du pool. Rien dans // Faire des choses
n'expose la connexion sous-jacente.
Existe-t-il un moyen de réinitialiser le niveau d'isolation sans le définir explicitement sur tous les appels à la base de données au cas où ce code aurait déjà été exécuté auparavant ?