1、

using (TransactionScope ts = new TransactionScope())
{  除非显示调用ts.Complete()方法。否则,系统不会自动提交这个事务。如果在代码运行退出这个block后,还未调用Complete(),那么事务自动回滚了。在这个事务块中,u.ADD()方法和t.ADD()方法内部都没有用到任何事务类

  TransactionScopeOption设为Suppress则为取消当前区块的事务,一般很少使用。

  对于多个不同服务器之间的数据库操作,TransactionScope依赖DTC(Distributed Transaction Coordinator)服务完成事务一致性。

  但是对于单一服务器数据,TransactionScope的机制则比较复杂。主要用的的是线程静态特性。线程静态特性ThreadStaticAttribute让CLR知道,它标记的静态字段的存取是依赖当前线程,而独立于其他线程的。既然存储在线程静态字段中的数据只对存储该数据的同一线程中所运行的代码可见,那么,可使用此类字段将其他数据从一个方法传递到该第一个方法所调用的其他方法,而且完全不用担心其他线程会破坏它的工作。TransactionScope 会将当前的 Transaction 存储到线程静态字段中。当稍后实例化 SqlCommand 时(在此 TransactionScope 从线程局部存储中删除之前),该 SqlCommand 会检查线程静态字段以查找现有 Transaction,如果存在则列入该 Transaction 中。通过这种方式,TransactionScope 和 SqlCommand 能够协同工作,从而开发人员不必将 Transaction 显示传递给 SqlCommand 对象。实际上,TransactionScope 和 SqlCommand 所使用的机制非常复杂。具体可以参考文章 http://www.microsoft.com/china/MSDN/library/netFramework/netframework/NETMattersSep.mspx?mfr=true
}

2、
var tran = DBContext.Database.BeginTransaction();
try{
  tran.Commit();

}
catch{
  tran.Rollback();
}

转载于:https://www.cnblogs.com/otsf/p/10220276.html

c#提交事务的两种方法相关推荐

  1. dapper mysql 批量_MySQL数据库之c#mysql批量更新的两种方法

    本文主要向大家介绍了MySQL数据库之c#mysql批量更新的两种方法 ,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 总体而言update 更新上传速度还是慢. 1:  简单的 ...

  2. oracle事务数统计,【学习笔记】Oracle数据库收集统计信息的两种方法介绍案例

    天萃荷净 分享一篇关于Oracle数据库收集统计信息的办法,Oracle DBMS_STATS与Oracle analyze使用方法案例 今天群里面讨论DBMS_STATS和analyze,这里进行了 ...

  3. SQL Server中灾难时备份结尾日志(Tail of log)的两种方法

    简介 在数据库数据文件因各种原因发生损坏时,如果日志文件没有损坏.可以通过备份结尾日志(Tail of log)使得数据库可以恢复到灾难发生时的状态. 例如: 上图中.在DB_1中做了完整备份,在Lo ...

  4. C++/C++11中用于定义类型别名的两种方法:typedef和using

    类型别名(type alias)是一个名字,它是某种类型的同义词.使用类型别名有很多好处,它让复杂的类型名字变得简单明了.易于理解和使用,还有助于程序员清楚地知道使用该类型的真实目的.在C++中,任何 ...

  5. jquery-12 折叠面板如何实现(两种方法)

    jquery-12 折叠面板如何实现(两种方法) 一.总结 一句话总结:1.根据点击次数来判断显示还是隐藏,用data方法保证每个元素一个点击次数:2.找到元素的下一个,然后toggle实现显示隐藏. ...

  6. java 匿名list,java创造匿名对象的两种方法

    在java中有时候需要一些匿名对象的使用.可能有些小伙伴拿还不会创造,其实我们在学习一些方法时都或多或少的接触过.本篇所要讲到的创造匿名对象总结了两种方法,分别是静态工具方法和Lambda表达式,我们 ...

  7. Android Studio导入Eclipse项目的两种方法

    Android Studio导入Eclipse项目有两种方法,一种是直接把Eclipse项目导入Android Studio,另一种是在Eclipse项目里面进行转换,然后再导入Android Stu ...

  8. Response.Redirect 打开新窗体的两种方法

    普通情况下,Response.Redirect 方法是在server端进行转向,因此,除非使用 Response.Write("<script>window.location=' ...

  9. centos下两种方法安装git

    centos 5 64位下两种方法安装git 这里来给大家介绍下编译安装和yum安装git.   系统:centos 5.5 64位   需要的软件包:git-latest.tar.gz epel-r ...

最新文章

  1. *PAT_B_1052_C++(20分)
  2. PyQt5入门——QListWidget实现图片缩略图列表
  3. NB-IoT四大关键特性及实现告诉你,为啥NB
  4. centos安装DHCP服务器
  5. Redis数据结构、持久化、缓存技术和集群详解
  6. 通过MBean server监控weblogic应用
  7. CCF NOI1048 检测矩阵
  8. 【小程序开发】—— 封装自定义弹窗组件
  9. word行距设置教程
  10. PHP 操作redis 详细讲解
  11. 基于MIT协议的详细介绍
  12. 《MEMDOG:一种基于 Linux 的在线内存检测器》
  13. 【数组】深析 “数组名称”
  14. 机器学习笔记一:导论
  15. python调用go或c语言
  16. 精美简历生成器(Nice_Resume_Builder)
  17. ADS16488驱动的软硬件设计以及ROS的驱动
  18. js正则 匹配 汉字、数字、英文字母、下划线 正则表达式
  19. 利用现有资源建立自己的经营模式
  20. Ubuntu18.04鲁班猫ROS-melodic适配镭神智能C16多线激光雷达

热门文章

  1. Queue.ArrayBlockQueue
  2. line-hieght与vertical-align的区别与联系
  3. 当ListView有Header时,onItemClick里的position不正确
  4. 微信快速开发框架(二) -- 快速开发微信公众平台框架---简介
  5. 解决域中打印机不能共享打印的问题
  6. zentaoPHP学习
  7. WPF的悬停工具栏实现方案
  8. java中的流程控制_Java中的流程控制
  9. flutter 一直loading_开源 | FLUI : Flutter 的组件扩展集
  10. iphone如何信任软件_苹果iPhone手机安装两个微信教程