2

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)
                    {
                    }
                 }
             }
4

2 に答える 2

3

私の理解では、トランザクション スコープが 1 つの接続のみに関連付けられている場合に機能します。多くの場合、接続を遅く開き、早く閉じることがベスト プラクティスであるためです。スコープが 2 つの接続にまたがる場合があります。これらのシナリオは、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
       }
   }

これらのリンクは、いくつかのポインタも提供するはずです

于 2010-11-30T20:52:15.440 に答える