外国网站上做雅思考试,怎样做金融网站,怎么用ai做企业网站框架,国内著名平面设计师的个人网站事务是一个原子的工作单位#xff0c;必须完整的完成单位里的所有工作#xff0c;要么全部执行#xff0c;要么全部都不执行。如果提交事务#xff0c;则事务执行成功#xff1b;如果回滚事务#xff0c;则事务执行失败。 事务具备4个基本特性--ACID(原子性、一致性、孤立…事务是一个原子的工作单位必须完整的完成单位里的所有工作要么全部执行要么全部都不执行。如果提交事务则事务执行成功如果回滚事务则事务执行失败。 事务具备4个基本特性--ACID(原子性、一致性、孤立性和持久性)。 在Linq to SQL中有三种方法创建事务 如果没有指定任何事务那么当调用SubmitChanges方法时DataContext会默认创建一个事务。使用TransactionScope创建轻量级事务给DataContext的Transaction属性指定事务 
下面我用代码分别来说明这几种创建事务的方法以Northwind数据库为例先来看看直接使用SubmitChanges NorthwindDataContext ctx  new NorthwindDataContext();Customer c1  new Customer { CustomerID  TESTA, CompanyName  testas company };Customer c2  new Customer { CustomerID  TESTBC, CompanyName  testbs company };ctx.Customers.Add(c1);ctx.Customers.Add(c2);ctx.SubmitChanges();上面这段代码中先创建了两个Customer对象然后添加到DataContext里面其中的c2的CustomerID赋值为TESTBC,长度为六个字符而数据库中该字段约束为5个字符长度这样在SubmitChanges的时候应该会有异常抛出。果然在执行的时候抛出了SqlException提示字符将被截断。 再通过Sql Server管理器可以看到上面这两条数据都没有被插入到数据库中。通过Reflector可以发现在SubmitChanges的时候Linq to SQL默认创建了一个孤立级别为Read Committed的事务它表示已提交的更新在事务间是可见的具体有哪些孤立级别可以参考ADO.NET相关资料 public virtual void SubmitChanges(ConflictMode failureMode){...transaction  this.provider.Connection.BeginTransaction(IsolationLevel.ReadCommitted);this.provider.Transaction  transaction;} 
如果不想使用默认的事务设置比如想改变事务的孤立级别我们可以给DataContext的Transaction属性赋值以此使用自定义的事务。 ctx.Transaction  ctx.Connection.BeginTransaction(System.Data.IsolationLevel.Serializable);try{ctx.SubmitChanges();ctx.Transaction.Commit();}catch{ctx.Transaction.Rollback();throw;}finally{ctx.Transaction  null;}最后一种方式是通过TransactionScope创建轻量级事务就像在ADO.NET中使用一样 using (TransactionScope scope  new TransactionScope()){ctx.SubmitChanges();scope.Complete();}上面的例子看起来似乎多此一举因为在SubmitChanges中会创建默认的事务但是改成下面这样就只能使用自定义的事务了 using (TransactionScope scope  new TransactionScope()){ctx.ExecuteCommand(exec ....);ctx.ExecuteCommand(exec ....);ctx.ExecuteCommand(exec ....);ctx.SubmitChanges();scope.Complete();}不管ExecuteCommand里面执行了哪些操作我们都能够指明这些行为和SubmitChanges处于同一个事务中。