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

            }

  • 相关阅读:
    JavaScript中的闭包
    SQL 备忘
    SqlServer 2005 升级至SP2过程中出现"身份验证"无法通过的问题
    unable to start debugging on the web server iis does not list an application that matches the launched url
    Freebsd 编译内核
    Freebsd 6.2中关于无线网络的设定
    【Oracle】ORA01219
    【Linux】Windows到Linux的文件复制
    【Web】jar命令行生成jar包
    【Linux】CIFS挂载Windows共享
  • 原文地址:https://www.cnblogs.com/kevin2013/p/1749048.html
Copyright © 2011-2022 走看看