J’ai un code qui fonctionne comme l’utilisation conseillée de TransactionScope, mais qui a une connexion ambiante au lieu d’une transaction ambiante.
Existe-t-il un moyen d’utiliser un object TransactionScope avec une connexion existante ou existe-t-il une alternative dans le cadre .Net à cette fin?
En fait, il y a un moyen.
connection.EnlistTransaction(Transaction.Current)
Cela fonctionne et ne favorise pas la transaction à dissortingbuer si ce n’est pas nécessaire (contrairement à ce que dit la documentation)
HTH
Pour inscrire une connexion dans un TransactionScope, vous devez spécifier 'Enlist=true'
dans sa chaîne de connexion et ouvrir la connexion dans l’étendue de cet object TransactionScope.
Vous pouvez utiliser SqlConnection.BeginTransaction
sur une connexion existante.
Mise à jour : Pouvez-vous utiliser BeginTransaction
comme ceci:
using (SqlConnection connection = new SqlConnection(connectionSsortingng)) { connection.Open(); SqlCommand command = connection.CreateCommand(); SqlTransaction transaction; // Start a local transaction. transaction = connection.BeginTransaction("SampleTransaction"); // Must assign both transaction object and connection // to Command object for a pending local transaction command.Connection = connection; command.Transaction = transaction; ... ... }
Après plus de recherches, la réponse à ma question s’est avérée être:
Non, la connexion doit être ouverte après l’instanciation de l’object TransactionScope.