2009-10-01 6 views
1

Je pense que les classes System.Transaction dans Framework 2.0 sont un excellent outil, bien conçu, visant à simplifier le code lorsque vous travaillez avec des transactions. Mais, (gros mais), il est impossible d'utiliser ces classes avec plusieurs connexions à la même base de données (même chaîne de connexion) sans promouvoir les transactions distribuées.Existe-t-il un moyen d'utiliser System.Transactions avec le regroupement de connexions?

http://social.msdn.microsoft.com/forums/en-US/adodotnetdataproviders/thread/3ce488eb-55a8-4535-adc7-c5b29a1523b5/

Multiple Connections With Same Connection String Under A Single Transaction, Elevated Transaction?

Microsoft travaille à résoudre ce problème, mais en attendant ¿quelqu'un connait une solution fiable, simple, pour permettre mécanisme de mise en commun de connexion tout en gardant la possibilité d'utiliser System.Transactions? C'est possible?

Répondre

1

Je ne sais pas ce que vous essayez d'atteindre:

  • Si les connexions vont à différentes bases de données dont vous avez besoin des transactions distribuées.
  • Si les connexions vont à la même base de données, l'ouverture des connexions pourrait être contrôlée dans votre code. Pourquoi ouvrez-vous plusieurs connexions, pourriez-vous envoyer l'objet de connexion en tant que paramètre et le réutiliser.

EDIT:

Je suis d'accord avec les commentaires ci-dessous qu'il est préférable d'ouvrir et de liens étroits au besoin. Mais si une connexion fait partie d'une transaction, elle ne sera pas retournée au pool, dans ce cas vous pourriez essayer de la réutiliser.

+0

Vous avez raison, je pourrais utiliser une seule connexion. Mais mes cours d'affaires fonctionnent avec le «paradigme de la mise en commun des connexions». Autrement dit, ils ouvrent des connexions «à la demande» et les classes ADO .NET Framework gèrent un pool interne de connexions maintenues ouvertes. Ce mécanisme est largement utilisé et présente certains avantages. Je voudrais utiliser System.Transactions mais sans avoir à changer autant de code. –

+0

J'ai mis à jour ma question pour la clarifier. Je parlais de la même base de données. Merci. –

+0

Il est recommandé d'utiliser l'évolutivité pour ouvrir et fermer les connexions si nécessaire. La mise en commun sous-jacente vérifie si les ressources réelles sont nettoyées ou réutilisées. –

Questions connexes