2009-11-23 8 views
4

J'ai lu à propos de TransactionScope et j'avais une question sur son interopérabilité avec les transactions ADO.Net. À l'heure actuelle, nous avons des méthodes d'accès aux données qui appellent chacune un proc stocké et commencent et engagent leurs propres transactions individuelles. trucs straighforward, passe-partout, les méthodes ressemblent à ceci:Utilisation de transactions ADO.Net dans un TransactionScope?

sqlCommand = //create SQLCommand with Stored proc 
SqlTransaction myTransaction = myConnection.BeginTransaction(); 
sqlCommand.Transaction = sqlTransaction; 
sqlCommand.Execute(); 
sqlTransaction.Commit(); 

J'ai simplifié les choses un peu, mais vous voyez l'idée.

Je dois maintenant appeler consécutivement deux de ces méthodes de classe et les valider ou les annuler en tant qu'équipe à partir de ma couche de gestion. Je ne peux pas modifier les méthodes de données, donc je pensais mettre les deux appels dans un bloc TransactionScope.

Si je fais cela, quel type de paramètres dois-je utiliser lors de la création de TransactionScope? J'ai déjà essayé ceci en utilisant l'option TransactionScopeOption.RequiresNew et les choses semblent fonctionner, mais c'est juste moi qui expérimente et je ne suis pas sûr si c'est la voie à suivre. (Je noterai ici qu'il s'agit exclusivement de transactions SQL exécutées sur le même serveur SQL.)

Je vois que TransactionScope a des options de constructeur pour gérer les transactions COM +. Parce que j'utilise les transactions ADO.Net, est-ce pertinent ici? Merci pour le conseil.

Répondre

7

La documentation TransactionScope here est un bon point de départ. Fondamentalement, il rend inutile la gestion des transactions au niveau ADO. Les connexions prendront automatiquement en compte les transactions ambiantes existantes (par défaut). N'oubliez pas que vous pouvez également modifier la manière dont les connexions sont inscrites dans les transactions ambiantes via la chaîne de connexion. Ce link fournira plus de détails.

Enlist 'vrai'. true indique que le pool de connexion SQL Server inscrit automatiquement la connexion dans le contexte de transaction du thread de création.

+1

Le lien msdn est mort. Une chose à savoir est que si la connexion a été créée en dehors de la portée, elle doit être enrôlée manuellement dans la transaction ambiante en appelant 'connection.EnlistTransaction (Transaction.Current)'. – kristianp

+0

Permaliens! J'ai lié à la documentation MSDN à la place et posté l'extrait. – micahtan

Questions connexes