关于C#事务的控制,假如:
class T
{
  public int a(){……}; //里面存在事务 成功返回1 失败0
  public int b(){……}; //里面存在事务 成功返回1 失败0
  public int c()
  {
    //事务开始
    a();
    b();
    //事务结束
  }
}a,b里边都对数据库有操作,c方法里面的事务 怎么实现?
--------------------------------------------------------------
目前想到一个办法 
把a,b方法里 事务之内的部分单独出来
形成新方法 aa(con),bb(con) 并以数据库连接作为参数
这样 a调用aa b调用bb  c调用aa,bb 
但是实际的类结构类关系比这复杂的多,改动起来比较大,且影响相关的类结构
有没有什么办法按最上边的做事务?

解决方案 »

  1.   

    可以使用面向方面的方法来处理事务,因为事务和基础的业务逻辑应当剥离开来.参考:http://www.narchitecture.net/Articles/ArticleDetails.aspx?id=diehmt
      

  2.   

    c里面就不必要加事务了,因为a和b里已经有了。你只要这么写:
    if(a() == 1)
    {
        b();
    }
    也就是先执行a();,如果执行成功了,那么再执行b();
      

  3.   

    对AOP的理解还不是很深刻,我使用的方法是这样的.专门一个全局静态对象来处理事务.
    每个业务单元里都使用事务对象提供的Connection和Transaction,先判断事务对象里有没有连接对象如果有就使用这个,如果没有就创建新的.事务对象中有计数器,当计数器为0时提交事务.不恰当的地方还请指出.
      

  4.   

    用分布式事务.net分布式事务例子
    http://www.supdown.com/Article/readcourse/bianchengwendang/.NET/.netfenbushishiwulizi.shtml
      

  5.   

    个人感觉AOP和分布式事务的性能不是很好.对于简单的事务需求还是直接使用ADO.NET提供的支持比较好.