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();
}
答案 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。