Betrachten Sie die folgenden Methoden.Wird TransactionScope implizit angewendet, bis explizit Completed?
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();
}
}
Wenn wir DoA()
nennen, tun die nachfolgenden Interaktionen in DoB()
und DoC()
Lauf im Rahmen der DoA()
‚s Transaktion, wie es zu SQL Server gehört? Wird DoC() im Kontext der Transaktionen DoA()
und DoB()
ausgeführt?
(Oder bin ich grob Mißverständnis etwas?)
Sie erhalten verschachtelte Transaktionen :) – DaveShaw
Es gibt Optionen, die dies steuern. Siehe "Verwalten des Transaktionsflusses mithilfe von TransactionScopeOption" von http://msdn.microsoft.com/en-us/library/ms172152(v=vs.85).aspx – AaronLS
Hinweis: Weitere Anmerkungen zu verschachtelten Transaktionen müssen dieselbe Isolationsstufe verwenden an der Ambient-Transaktion teilnehmen. – AaronLS