請考慮以下方法。TransactionScope隱式應用,直到明確完成?
DoA()
{
using (TransactionScope scope = new TransactionScope)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(query, connection);
command.ExecuteNonReader();
DoB();
scope.Complete();
}
}
}
DoB()
{
using (TransactionScope scope = new TransactionScope)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(query, connection);
command.ExecuteNonReader();
DoC();
scope.Complete();
}
}
}
DoC()
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(query, connection);
command.ExecuteNonReader();
}
}
如果我們調用DoA()
,做DoB()
隨後的相互作用和DoC()
運行在DoA()
的交易的情況下,因爲它涉及到SQL Server? DoC()是否在DoA()
和DoB()
的事務中運行?
(或者,我嚴重誤解的東西?)
你得到嵌套交易:) – DaveShaw
有一些選項可以控制這一點。請參閱http://msdn.microsoft.com/en-us/library/ms172152(v=vs.85).aspx – AaronLS
中的「使用TransactionScopeOption管理事務流」。注意有關嵌套事務的進一步下行註釋必須按順序使用相同的隔離級別參與環境交易。 – AaronLS