TransactionScope () в SQL Azure - PullRequest
       23

TransactionScope () в SQL Azure

2 голосов
/ 09 апреля 2010

Поддерживает ли Sql Azure использование TransactionScope () при выполнении вставок? Ниже приведен фрагмент кода того, что я пытаюсь сделать.

using (var tx = new TransactionScope(TransactionScopeOption.RequiresNew, new TransactionOptions() { IsolationLevel = IsolationLevel.ReadCommitted }))
            {
                using (var db = MyDataContext.GetDataContext()) 
                {
                    try
                    {
                        MyObject myObject =  new MyObject()
                       {
                         SomeString = "Monday"

                       };
                        db.MyObjects.InsertOnSubmit(myObject);
                        db.SubmitChanges();
                        tx.Complete();
                    }
                    catch (Exception e)
                    {
                    }
                 }
             }

Ответы [ 2 ]

3 голосов
/ 19 ноября 2015

Быстрое обновление распределенных транзакций с базой данных SQL Azure. Несколько дней назад мы представили поддержку распределенных транзакций в базе данных SQL Azure. Функция, которая освещает возможность, называется эластичными транзакциями базы данных. Основное внимание уделяется сценариям с использованием API-интерфейсов распределенных транзакций .NET, таких как TransactionScope. Эти API-интерфейсы начинают работать с базой данных SQL Azure после установки нового выпуска 4.6.1 .NET Framework. Вы можете найти больше информации о том, как начать работу здесь: https://azure.microsoft.com/en-us/documentation/articles/sql-database-elastic-transactions-overview/.

Пожалуйста, попробуйте!

3 голосов
/ 30 ноября 2010

Насколько я понимаю, это работает в случае, когда область транзакции привязана только к одному соединению. Часто, потому что это лучшая практика, чтобы открыть соединение поздно и закрыть рано. может быть ситуация, когда область действия охватывает два соединения. Эти сценарии не поддерживаются в SQL Azure.

Пример того, где это может не сработать; беру пример; Предполагая, что MyDataContext.GetDataContext () возвращает новый экземпляр подключения.

   using (var tx = new TransactionScope(TransactionScopeOption.RequiresNew, 
                                        new TransactionOptions() 
                                            {  IsolationLevel = IsolationLevel.ReadCommitted }
                                       ))
   {
       try{ 
           DoSomething(); //a method with using (var db = MyDataContext.GetDataContext())
           DoSomethingElse(); //another method with using (var db = MyDataContext.GetDataContext())
           tx.Complete();
       }
       catch { //Exception handler
       }
   }

Эти ссылки должны дать вам несколько указателей

...