这种需求,你需要在数据库中添加存储过程来实现,而不是所有逻辑都用程序去实现
否则你逻辑想的再多,也避免不了一个问题:假如我A操作完了,这时数据库连接异常了,那么我既无法执行B的插入,也无法执行A的回滚,怎么办?

解决方案 »

  1.   

    需要引用相关的组件和命名空间
    using System.Transactions;然后在需要事务的地方用下面抱着
    using (TransactionScope scope = new TransactionScope())
                {
    ...操作...
                    scope.Complete();//事务提交
                }我是做web的~每一次请求都是重新来过的~很少说让实体类回到原来
      

  2.   


    层面不同,大哥。你说的是ORM中的处理,我说的是业务逻辑的处理。
      

  3.   


    求思路。首先数据模型需要设计为增量模式,需要一个有效标识表格(有一个状态字段包括 处理中/成功/失败 3种状态),所有关联操作记录公用同一个有效标识。在应用层面过滤掉 有效标识状态不是成功的所有记录。
    最后由于增量模式可能产生的数据爆发,需要根据实际情况选择合适的时间定期批量处理 成功/失败 的相关记录。当然上面说的这些,就算是有相关框架的支撑,因为增量模式的处理也会比普通的事务处理麻烦一点,仅仅是在 性能/可靠 要求严格的场合才使用的方法。
    如果你没有相关技术积累,要么直接使用TransactionScope,要么自定义一个应用层的“TransactionScope”(这个就需要自己实现逆向操作)。
      

  4.   

    这个看你怎么封的底层了,一般我们会在底层留下可空的TransactionScope 参数或者已经和TransactionScope挂接好的conn做参数内部判定这个参数不为空,则使用外部统一的事务做处理,如果这参数为空就不用管回滚了,内部代码自己做自己的事情就成
      

  5.   


    求思路。首先数据模型需要设计为增量模式,需要一个有效标识表格(有一个状态字段包括 处理中/成功/失败 3种状态),所有关联操作记录公用同一个有效标识。在应用层面过滤掉 有效标识状态不是成功的所有记录。
    最后由于增量模式可能产生的数据爆发,需要根据实际情况选择合适的时间定期批量处理 成功/失败 的相关记录。当然上面说的这些,就算是有相关框架的支撑,因为增量模式的处理也会比普通的事务处理麻烦一点,仅仅是在 性能/可靠 要求严格的场合才使用的方法。
    如果你没有相关技术积累,要么直接使用TransactionScope,要么自定义一个应用层的“TransactionScope”(这个就需要自己实现逆向操作)。我靠,这么复杂,先学习下再说。不过你这个倒是一个思路,统一批处理,好像银行就是采用这种办法吧。
      

  6.   


    层面不同,大哥。你说的是ORM中的处理,我说的是业务逻辑的处理。这跟ORM有什么关系?? 你这些操作不就是一个事务吗~