.Net 使用事物总结

为了避免因未知错误而代码已经执行,导致数据丢失或更改的情况,事物给我们提供了很好的解决的方案。

事物:简而言之就是,如果有任何一个方法执行出错,那么整个的都不会执行,数据也不会有任何变化。下面是一个小案例:

public ActionResult UpdateOperationLogID() 
         {
             string operationLogID = "XXXX-XXX-XXX-XXXX";
             ServiceConfig sc = new ServiceConfig();
             //指定事务类型
             sc.Transaction = TransactionOption.Required;
             //设置启动跟踪
             sc.TrackingEnabled = true;
             //创建一个上下文,该上下文的配置由作为 cfg 参数传递的 ServiceConfig 对象来指定。
             //随后,客户端和服务器端的策略均被触发,如同发生了一个方法调用。
             //接着,新的上下文被推至上下文堆栈,成为当前上下文
             ServiceDomain.Enter(sc);
        try
        {       
         /*这里我定义了两个更新方法,第一个方法可以正常执行,但第二个方法就会报错,这个时候,其实我们第一个方法的更新操作也不会执行。而会直接到回滚里,数据不会有任何变化*/
        new  UserCarBindBLL().UpdateOperationLogID(operationLogID);//1        
        new  UserCarBindBLL().UpdateOperationLogID("259445");//2
            //提交事务
            ContextUtil.SetComplete();
            return SuccessResult(111);
        }
        catch (Exception)
        {
            //回滚事务
            ContextUtil.SetAbort();
            throw;
        }
        finally
        {
            //触发服务器端的策略,随后触发客户端的策略,如同一个方法调用正在返回。
            //然后,当前上下文被弹出上下文堆栈,调用 Enter 时正在运行的上下文成为当前的上下文。
            ServiceDomain.Leave();
        }
    }

为您推荐

发表评论

电子邮件地址不会被公开。 必填项已用*标注