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

时间: 2024-08-29 18:50:10

Linq多表操作中事务的应用的相关文章

代码-linq多表连接查询速度很慢,但我在数据库查询分析器中却是秒查,请各位大侠帮我分析下

问题描述 linq多表连接查询速度很慢,但我在数据库查询分析器中却是秒查,请各位大侠帮我分析下 with temp as ( select (case when SHIFTSCHEDULEID is null then (case when TICKET_SELL_TYPE=2 then (select COMPANY_ID from TBL_YD_SHIFT where SHIFTNUMBER= (select SHIFTNUMBER from TBL_SP_TICKET where tick

ADO.NET和LINQ中古怪的事务特性

LINQ中的事务 依赖于TransactionScope ,一个使用依赖全局变量的非OO设 计模式的.NET 2.0类. TransactionScope被用来为一组变化设置事务.不像在ADO.NET中的事务对象 ,TransactionScope不限于一个单独的数据库链接.它最常用的一个案例是在多 台服务器上运行一个事务. 当一个TransactionScope对象被创建时,它会自动将自己注册成线程的事务 .所有的事务感知操作也将会自动地使用这个事务,而不需要将事务对象传递给 对象.事务感知对

Greenplum列存压缩表事务机制

事务隔离级别 我们知道Heap表的事务隔离是通过MVCC实现,但是在列存表没有记录xmin,xmax等多版本信息,仅仅记录了块的元信息以及数据,那么它是如何实现事务隔离的? 仍然借助于Heap表,每创建一个列存表,同时创建一个heap辅助表表,通过select * from pg_appendonly可以看到辅助表的OID(segrelid),这个辅助表几面记录了什么呢? typedef struct AOCSVPInfoEntry { int64 eof; int64 eof_uncompre

透明的分库分表方案

问题提出 随着应用规模的不断扩大,单机数据库就慢慢无法满足应用的需要了,这主要表现在如下方面: 存量数据越来越大,查询速度越来越慢 访问并发越来越大,磁盘IO.网络IO.CPU都慢慢成为瓶颈 事务数越来越多,事务冲突越来越严重,导致TPS越来越少 这个时候,有的人采用了换商用数据库的方案比如Oracle,然后用Oracle的RAC方式进行水平扩展.但是带来的缺点也比较明显,第一是成本太高,一般人吃不消:第二,管理复杂度较单节点有非常大的提升,风险及管理成本也相应增加:第三,对人员的水平要求更高,

事务复制

16.4.1 事务复制的特点    前面我们指出复制的本质就是从源数据库向目标数据库复制数据,但对不同的复制类型而言总是有差别的.从复制的具体内容来看快照复制是真正意义上的数据复制,不管采用何种数据接收方式(如将表删除后再重建或删除表中数据但保留表结构),在网络中传送的是数据.而事务复制在网络中传送的是事务(由一条或多条INSERT. DELETE. UPDATE):从传输的数据量来看,事务复制仅将发生的变化传送给订购者,是一种增量复制,但快照复制却将整个出版物复制给订购者.    由于事务复制

MySQL 4.1.0 中文参考手册 --- 6.7 MySQL 事务与锁定命令

mysql|参考|参考手册|中文 MySQL 4.1.0 中文参考手册 --- 犬犬(心帆)翻译 MySQL Reference Manual for version 4.1.0-alpha. 6.7 MySQL 事务与锁定命令6.7.1 BEGIN/COMMIT/ROLLBACK 句法 缺省的,MySQL 运行在 autocommit 模式.这就意味着,当你执行完一个更新时,MySQL 将立刻将更新存储到磁盘上. 如果你使用事务安全表 (例如 InnoDB.BDB),通过下面的命令,你可以设置

MS SQL基础教程:事务复制

16.4.1 事务复制的特点 前面我们指出复制的本质就是从源数据库向目标数据库复制数据,但对不同的复制类型而言总是有差别的.从复制的具体内容来看快照复制是真正意义上的数据复制,不管采用何种数据接收方式(如将表删除后再重建或删除表中数据但保留表结构),在网络中传送的是数据.而事务复制在网络中传送的是事务(由一条或多条INSERT. DELETE. UPDATE):从传输的数据量来看,事务复制仅将发生的变化传送给订购者,是一种增量复制,但快照复制却将整个出版物复制给订购者. 由于事务复制要不断地监视

MSSQL · 应用案例 · 日志表设计优化与实现

摘要 这篇文章从日志表问题引入.日志表的共有特性.日志表的设计需求.设计思路以及设计详细实现的角度,阐述了在SQL Server数据库中如何最优化设计日志表来降低系统资源的占用和提高系统吞吐量. 问题引入 在平时与客户服务与交流过程中,我们不止一次的被客人问及这样的场景:我们现在面临如何设计SQL Server日志表方案,如何最优化设计数据库日志记录表.因为,日志表设计会面对如下问题: 表记录数大:日志表由于记录了应用程序的很多操作日志,有的业务有很多步骤,甚至每个步骤操作都会被记录到日志表中

MSSQL-应用案例-日志表设计优化与实现

title: MSSQL-应用案例-日志表设计优化与实现 author: 风移 摘要 这篇文章从日志表问题引入.日志表的共有特性.日志表的设计需求.设计思路以及设计详细实现的角度,阐述了在SQL Server数据库中如何最优化设计日志表来降低系统资源的占用和提高系统吞吐量. 问题引入 在平时与客户服务与交流过程中,我们不止一次的被客人问及这样的场景:我们现在面临如何设计SQL Server日志表方案,如何最优化设计数据库日志记录表.因为,日志表设计会面对如下问题: 表记录数大:日志表由于记录了