閱讀667 返回首頁    go 阿裏雲 go 技術社區[雲棲]


Linq多表操作中事務的應用

 

linq中單表的操作本來是通過自身的事務處理操作的,但是,多個表之間的數據同步操作就不行了。我們也

可以用sql中的事務機製,其實也是一個道理。

 

  我們要使用TransactionScope,必須添加System.Transactions.dll引用。

  ①我們先看一個可以正確插入的例子:

   using (TransactionScope scope = new TransactionScope())
   {
                M_Test_QBank_Choose m = new M_Test_QBank_Choose();
                m.QContent = "111";
                m.LessonNum = "111";
                m.Answer = "111";
                m.AnswerIndex = "111";
                m.TeacherID = "10000";
               BLL.M_Test_QBank_ChooseBLL.Insert(m);  // insert方法裏麵已經submitChanges
               int a = m.id;
               scope.Complete();
   }

   a可以拿到插入的記錄的id。


   ②我們來模擬一個插入出錯的情景:

            using (TransactionScope scope = new TransactionScope())
            {
                M_Test_QBank_Choose m = new M_Test_QBank_Choose();
                m.QContent = "111";
                m.LessonNum = "111";
                m.Answer = "111";
                m.AnswerIndex = "111";
                m.TeacherID = "10000";
               BLL.M_Test_QBank_ChooseBLL.Insert(m);
              int a = m.id;
             int b = Convert.ToInt32("aaa");
              scope.Complete();
            }



a可以拿到插入的記錄,但是下麵出錯,就會回滾,數據庫中不會有插入的記錄。

這裏的scope.Complete();會將裏麵的多個表的操作同時提交。如果不成功則會自動回滾。


關於Linq事務的詳細說明,請參見我新浪博客轉載的文章《Linq to SQL 事務》

https://blog.sina.com.cn/s/blog_67aaf4440100sbyb.html

 

關於使用時提示,請參見我的新浪博客:《MSDTC不可用解決辦法

https://blog.sina.com.cn/s/blog_67aaf4440100wo3z.html

最後更新:2017-04-02 06:52:24

  上一篇:go 係統的存儲模式---大小端模式
  下一篇:go java之httpclient點點補充-登錄問題