TransactionScope和数据库连接

jga*_*fin 5 .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();
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*lje 5

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

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


Amy*_*y B 5

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

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

调用 Close 仅​​意味着您的代码已完成连接。如果 ADO.NET 基础结构仍需要连接(以完成事务或连接池),则连接保持打开状态。