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

            }

  • 相关阅读:
    【刷题】洛谷 P2764 最小路径覆盖问题
    【刷题】BZOJ 3546 [ONTAK2010]Life of the Party
    【刷题】BZOJ 3175 [Tjoi2013]攻击装置
    【刷题】BZOJ 4516 [Sdoi2016]生成魔咒
    【刷题】SPOJ 1811 LCS
    【刷题】洛谷 P3804 【模板】后缀自动机
    【刷题】SPOJ 8222 NSUBSTR
    (98)Wangdao.com_第三十天_拖拉事件
    ECMA Script 6_必须要知道的基础
    (97)Wangdao.com_第三十天_触摸事件
  • 原文地址:https://www.cnblogs.com/kevin2013/p/1749048.html
Copyright © 2011-2022 走看看