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 事务》

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

 

关于使用时提示,请参见我的新浪博客:《MSDTC不可用解决办法

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

上一篇:《语义网基础教程(原书第3版)》—— 1.2 语义网技术


下一篇:.NET常用操作小知识