有没有办法将TransactionScope与现有连接一起使用?
我有一些代码就像建议使用TransactionScope一样,但是有环境连接而不是环境事务。
有没有办法将TransactionScope对象与现有连接一起使用,或者.Net框架中是否有替代方法用于此目的?
事实上,有一种方法。
connection.EnlistTransaction(Transaction.Current)
它是有效的,如果没有必要,它不会促使事务分发(与文档所说的相反)
HTH
要在TransactionScope中登记连接,您需要在其连接字符串中指定'Enlist=true'
,并在该TransactionScope对象的范围内打开连接。
您可以在现有连接上使用SqlConnection.BeginTransaction
。
更新 :你可以像这样使用BeginTransaction
:
using (SqlConnection connection = new SqlConnection(connectionString)) { 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; ... ... }
经过更多的研究,我的问题的答案结果是:
不,在实例化TransactionScope对象后需要打开连接。