Linq to SQL之使用事务

事务是一个原子的工作单位,必须完整的完成单位里的所有工作,要么全部执行,要么全部都不执行 。如果提交事务,则事务执行成功;如果回滚事务,则事务执行失败。 事务具备4个基本特性--ACID(原 子性、一致性、孤立性和持久性)。

在Linq to SQL中,有三种方法创建事务:

如果没有指定任何事务,那么当调用SubmitChanges方法时,DataContext会默认创建一个事务。

使用TransactionScope创建轻量级事务

给DataContext的Transaction属性指定事务 

下面我用代码分别来说明这几种创建事务的方法,以Northwind数据库为例,先来看看直接使用 SubmitChanges:

 NorthwindDataContext ctx = new NorthwindDataContext();

  Customer c1 = new Customer { CustomerID = "TESTA", CompanyName =  "testa's company" };
  Customer c2 = new Customer { CustomerID = "TESTBC", CompanyName =  "testb's company" };

  ctx.Customers.Add(c1);
  ctx.Customers.Add(c2);

  ctx.SubmitChanges();

上面这段代码中,先创建了两个Customer对象然后添加到DataContext里面,其中的c2的CustomerID赋 值为"TESTBC",长度为六个字符,而数据库中该字段约束为5个字符长度,这样在SubmitChanges的时候应 该会有异常抛出。果然在执行的时候抛出了SqlException,提示字符将被截断。

时间: 2024-09-20 00:41:28

Linq to SQL之使用事务的相关文章

Linq to sql并发与事务

本文转载:http://www.cnblogs.com/lovecherry/archive/2007/08/20/862365.html 检测并发          首先使用下面的SQL语句查询数据库的产品表: select * from products where categoryid=1          查询结果如下图:          为了看起来清晰,我已经事先把所有分类为1产品的价格和库存修改为相同值了.然后执行下面的程序:         var query = from p

LINQ to SQL语句(13)之开放式并发控制和事务

Simultaneous Changes开放式并发控制 下表介绍 LINQ to SQL 文档 中涉及开放式并发的术语: 术语 说明 并发 两个或更多用户同时尝试更新同一数据库行的情形. 并发冲突 两个或更多用户同时尝试向 一行的一列或多列提交冲突值的情形. 并发控制 用于解决并发冲突的技术. 开放式并发控制 先调查其他事务是否已更改了行中的值,再允许提交更改的技术.相 比之下,保守式并发控制则是通过锁定记录来避免发生并发冲突.之所以称作开 放式控制,是因为它将一个事务干扰另一事务视为不太可能发

LINQ体验(10)——LINQ to SQL语句之开放式并发控制和事务

从今天开始继续这个系列.告诉大家一个好消息:微软于2月1日发布了 Visual Studio Team System 2008 Team Suite简体中文版,您可以在下载 Visual Studio Team System 2008 Team Suite简体中文版90 天试用版.今天简 单的学习下开放式并发控制和事务的内容,具体详细的内容现在可以参看MSDN了 . Simultaneous Changes开放式并发控制 下表介绍 LINQ to SQL 文 档中涉及开放式并发的术语: 术语 说

SOA数据访问:使用LINQ To SQL和实体框架实现灵活的数据访问

本文配套源码 本文使用以下技术: LINQ to SQL.ADO.NET实体框架和SOA 目录 创建数据访问层 持久化各个对象 跨服务边界跟踪更改 配置客户端 总结 迄今为止,Microsoft 已面向开发人员发布了两种旨在减少关系数据领域和面向对象的编程之间 的阻抗失谐的产品:LINQ to SQL 和 ADO.NET 实体框架.借助其中任何一种产品,您不必编写大部分探 测代码,即可实现对象持久性.但是,将这些对象关系映射 (ORM) 技术应用到面向服务的应用程序体系 结构为应用程序开发人员带

在Linq to Sql中管理并发更新时的冲突(1) 预备知识

无论与目前的ORM框架相比有没有优势,Linq to Sql在语言和平台的级别上 为我们提供了一种新的操作对象和数据的方式,在一定程度上为我们解决了 Object != Data的问题.在实际应用中,对于数据库的操作往往有着天生的并发 性,因此在更新数据时可能会产生冲突.有些时候,如果没有合理的解决冲突问 题,轻则让用户摸不着头脑,重则让系统数据处于一种不一致的状态.Linq to Sql自然考虑到了这一点,本系列讨论的内容,就是在使用Linq to Sql时,如何 管理并发更新时产生的冲突.

LINQ to SQL语句(19)之ADO.NET与LINQ to SQL

ADO.NET与LINQ to SQL 它基于由 ADO.NET 提供程序模型提供的服务.因 此,我们可以将 LINQ to SQL 代码与现有的 ADO.NET 应用程序混合在一起,将 当前 ADO.NET 解决方案迁移到 LINQ to SQL. 1.连接 在创建 LINQ to SQL DataContext 时,可以提供现有 ADO.NET 连接.对 DataContext 的所 有操作(包括查询)都使用所提供的这个连接.如果此连接已经打开,则在您使 用完此连接时,LINQ to SQL

Linq To Sql进阶系列(一)-从映射讲起

本系列,或多或少,直接或间接依赖入门系列知识.但,依然追求独立成章.因本文作者水平有限, 文中错误难免,敬请读者指出并谅解.本系列将会和入门并存. 案例 某君被邀为一超市设计数据库,用来存储数据.该君根据该超市中实际出现的对象,设计了 Customer, Employee,Order, Product等表,用来保存相应的客户,员工,订单,货品等.太好了,该 君很有oo的思想吗. 如果,你被要求用类及对象,来描述该关系型数据,你该如何做呢?在linq推出之前,ADO.NET被用 来做数据访问层.而

Linq to Sql : 三种事务处理方式

原文:Linq to Sql : 三种事务处理方式     Linq to SQL支持三种事务处理模型:显式本地事务.显式可分发事务.隐式事务.(from  MSDN: 事务 (LINQ to SQL)).MSDN中描述得相对比较粗狂,下面就结合实例来对此进行阐述. 0. 测试环境 OS Windows Server 2008 Enterprise + sp1 IDE Visual Studio 2008, .net framework 3.5 + SP1 DB SQL Server 2000

Linq To Sql 简单的单表批量删除

      今天在网上看到老赵前辈的扩展LINQ to SQL:使用Lambda Expression批量删除数据,我看完了文章,还没有看源代码,我一般都习惯于在看别人的代码前,思考一下如果我来实现我会如何实现.我想了许久操作表达式树操作二元表达式(BinaryExpression)我是肯定困难的,对于表达式类库的了解不多,用了Reflector反射,结果什么都看不见,也许我的Reflector版本低了,没有更新.我就放弃了这种实现方式,我想有没有其他的方式呢?最终我觉得可以操作生成sql执行同