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

目录
相关文章
|
JavaScript
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)(下)
Node.js【GET/POST请求、http模块、路由、创建客户端、作为中间层、文件系统模块】(二)-全面详解(学习总结---从入门到深化)
116 0
|
存储 安全 Java
Java基础面试知识你真的掌握了吗?
Java基础面试知识你真的掌握了吗?
158 1
|
存储 SpringCloudAlibaba 关系型数据库
SpringCloud Alibaba之Seata分布式事务学习笔记(二)
SpringCloud Alibaba之Seata分布式事务学习笔记(二)
SpringCloud Alibaba之Seata分布式事务学习笔记(二)
|
前端开发 应用服务中间件 Nacos
SpringBoot+Vue前后端分离项目排错思路
SpringBoot+Vue前后端分离项目排错思路
118 0
|
缓存 NoSQL Redis
redis面试题
redis面试题
|
小程序 前端开发 Android开发
【uniapp小程序】—— APP项目云打包(安卓)
【uniapp小程序】—— APP项目云打包(安卓)
1754 0
【uniapp小程序】—— APP项目云打包(安卓)
|
Java 数据库连接
JDBC学习(十二):使用BeanHandler实现查询
JDBC学习(十二):使用BeanHandler实现查询
321 0
|
存储 缓存 关系型数据库
Java面试题之MySQL篇
MySQL考察的点其实在面试中不是很多,面试官一般喜欢问的是Spring还有其他开源框架,还有就是MySQL的架构也要了解。
172 0
Java面试题之MySQL篇
|
存储 C++ 容器
【C++学习笔记】:priority_queue 容器
优先级队列(priority_queue)是一种容器适配器,该容器适配器模拟的是队列存储结构,其特点是:新元素只能从一端(队尾)入队,从另一端(队头)出队;...
164 0
|
Kubernetes Devops jenkins
技术分享 | 这些常用测试平台,你们公司在用的是哪些呢?
测试管理平台是贯穿测试整个生命周期的工具集合,它主要解决的是测试过程中团队协作的问题。在整个测试过程中,需要对测试用例、Bug、代码、持续集成等等进行管理。下面分别从这四个方面介绍现在比较流行的管理平台。