TransactionScope和数据库连接

时间:2011-02-14 20:06:15

标签: .net transactionscope

TransactionScope是否可以使用已关闭的数据库连接?

using (var transaction = new TransactionScope(TransactionScopeOption.Required))
{
    // creates a new connection, does stuff, commit trans and close
    repos1.DoSomething(); 

    // creates a new connection, does stuff, commit trans and close
    repos2.DoSomething(); 

    transaction.Complete();
}

2 个答案:

答案 0 :(得分:4)

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.close.aspx

  

通过System.Transactions开始的事务通过System.Transactions基础结构进行控制,不受SqlConnection.Close的影响。

调用Close只表示您的代码已通过连接完成。如果ADO.NET基础结构仍需要连接(完成事务或连接池),则连接仍保持打开状态。

答案 1 :(得分:3)

是的,这应该可以正常工作。在内部,连接应保持打开,直到事务完成。请记住,如果使用多个连接,则可能需要DTC,即使它们属于同一个数据库。

此外,您没有提到您正在使用哪个数据库,但是MySQL实现中存在导致无法正常工作的错误。对于MySQL,这是fixed in MySQL 5.1.3