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

            }

  • 相关阅读:
    软件架构——”淘宝网”质量属性研究
    漫谈架构——读后感
    问题账户需求分析
    关于《软件需求分析》需要掌握哪些必要的内容的总结与思考------读后感
    人月神话阅读笔记4
    **系统项目目标文档
    人月神话阅读笔记3
    人月神话阅读笔记2
    人月神话阅读笔记1
    问题账户需求分析
  • 原文地址:https://www.cnblogs.com/kevin2013/p/1749048.html
Copyright © 2011-2022 走看看