2008-12-27 6 views
2

Lors de l'utilisation d'ado.net et de la création de plusieurs connexions à une base de données MS SQL Server au sein d'une seule transaction (using System.Transactions.TransactionScope), System.Transactions élève la transaction du gestionnaire de transactions léger vers le coordinateur de transactions distribuées (noyau coordinateur de transaction sur Vista), même si les chaînes de connexion sont les mêmes pour tous les objets de connexion?Connexions multiples avec la même chaîne de connexion sous une transaction unique, transaction élevée?

La documentation est quelque peu ambiguë sur cette situation spécifique. Il dit que la transaction sera augmentée si une autre connexion est ouverte au serveur pendant la transaction mais elle ne dit pas si elle le fait tout le temps ou seulement si la chaîne de connexion est différente. Cela n'a pas de sens pour moi d'élever la transaction si la chaîne de connexion est la même, mais si c'est le cas, cela rend le gestionnaire de transactions léger complètement inutile, IMO.

Répondre

3

Dans la version actuelle, il augmente toujours la transaction, malheureusement.

Ce qui, comme vous le dites, rend TransactionScope beaucoup moins utile qu'elle ne le serait autrement. Je crois qu'il est prévu de changer cela dans une future version.

+0

Ugh, ça craint. Avez-vous des stratégies pour contourner cette "fonctionnalité"? Ma seule supposition est de garder un objet de connexion au niveau de la session (pas nécessairement via l'objet Session) ouvert lors d'une requête utilisateur et de différer tous les appels à travers sa couche d'accès aux données pour l'utiliser. Je vais commencer une autre question –

Questions connexes