Linq to sql:事务处理

来源:互联网 发布:一城一名店网络平台 编辑:程序博客网 时间:2024/06/17 08:51
Linq to sql 在提交更新的时候默认会创建事务,一部分修改发生错误的话其它修改也不


会生效:


        ctx.Customers.Add(new Customer { CustomerID = "abcdf", CompanyName =


"zhuye" });


        ctx.Customers.Add(new Customer { CustomerID = "abcde", CompanyName =


"zhuye" });


        ctx.SubmitChanges();


假设数据库中已经存在顾客 ID 为“abcde”的记录,那么第二次插入操作失败将会导致第


一次的插入操作失效。执行程序后会得到一个异常,查询数据库发现“abcdf”这个顾客也没


有插入到数据库中。


如果每次更新后直接提交修改,那么我们可以使用下面的方式做事务:




if (ctx.Connection != null) ctx.Connection.Open();


DbTransaction tran = ctx.Connection.BeginTransaction();

        ctx.Transaction = tran;


try


                { 
 
    CreateCustomer(new Customer { CustomerID = "abcdf", CompanyName = 


"zhuye" });


            CreateCustomer(new Customer { CustomerID = "abcde", CompanyName = 


"zhuye" });


                        tran.Commit(); 


                } 


catch


                { 


                        tran.Rollback(); 


                } 








private void CreateCustomer(Customer c)


        { 


        ctx.Customers.Add(c);


        ctx.SubmitChanges();


        } 


运行程序后发现增加顾客 abcdf 的操作并没有成功。或者,我们还可以通过


TransactionScope 实现事务:

using (TransactionScope scope = new TransactionScope())


                { 


            CreateCustomer(new Customer { CustomerID = "abcdf", CompanyName = 


"zhuye" });


            CreateCustomer(new Customer { CustomerID = "abcde", CompanyName = 


"zhuye" });


            scope.Complete();


                } 


原创粉丝点击