zoukankan      html  css  js  c++  java
  • Linq to sql(七):并发与事务(三)

    事务处理

           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();

            }

  • 相关阅读:
    Android开发规范
    驱动开发规范
    USER 版本与ENG 版本差异
    解决:更改短信中心号码不能及时更新显示
    深度分析:Android中Mms设置页面更改短信中心号码流程
    Android中Parcel的分析以及使用
    DialogFragment详解
    开启飞行模式,进入信息,再关闭飞行模式,进入信息设置查看短信息中心号码,有时短信息中心号码显示无。
    研究 iOS 摄像头缩放的内容
    iOS图片缓存库基准对比
  • 原文地址:https://www.cnblogs.com/kevin2013/p/1749048.html
Copyright © 2011-2022 走看看