Проблемы с TransactionScope при локальных транзакциях
От: shkabi  
Дата: 20.05.09 15:31
Оценка:
Пытаюсь разобраться с работой TransactionScope. Для этого создал следующий код, который проверяет поведение TransactionScope с локальными и распределенными транзакциями с различными TransactionScopeOptions и вариантами завершения транзакции:

public void Local(TransactionScopeOption scopeOption, bool completeRoot, bool completeNested)
{
    using (TransactionScope scope1 = new TransactionScope())
    {
        using(SqlConnection conn = new SqlConnection("...")){
            conn.Open();

            Insert(1, conn);//Inserts a value into a database using specified connection;
            using (TransactionScope scope2 = new TransactionScope())
            {
                Insert(2, conn);//Insert a value into a database using specified connection;
                if (completeNested) 
                    scope2.Complete();
            }
            Insert(3, conn);//Insert a value into a database using specified connection;
            if (completeRoot) 
                scope1.Complete();
        }
    }
}

public void Distributed(TransactionScopeOption scopeOption, bool completeRoot, bool completeNested)
{
    using (TransactionScope scope1 = new TransactionScope())
    {
        InsertToDB1(1);//Creates a connection to DB1 and inserts a value;
        using (TransactionScope scope2 = new TransactionScope())
        {
            InsertToDB2(2);//Creates a connection to DB2 and inserts a value;
            if (completeNested)
                scope2.Complete();
        }
        InsertToDB3(3);//Creates a connection to DB3 and inserts a value;
        if (completeRoot)
            scope1.Complete();
    }

}

Я использую SQL Server 2005. TransactionScope работает предсказуемо с распределенными транзакциями, однако когда используется локальная транзакция TransactionScope ведет себя непонятно. Результаты с таблице, которую можно посмотреть по следующей ссылке здесь http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/78c6f17c-c612-4aa7-82c0-34a8ad69c07c . Она включает список значений, записаных в базу, при различных вариантах:
Есть ли у кого идеи почему TransactionScope ведет себя по-разному при локальных и респределенных транзакциях?
Спасибо
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.