先祝大家新春快乐,虎虎生威!问题:
1.首先是这样的,老师一直提醒我,事务你就写在存储过程里面,写代码里不合适,但是我看Java的spring,它的事务就是在业务逻辑层的,大家觉得事务该写在哪里?2.事务可以存储过程,数据访问层(SqlTransaction),业务层(TransactionScope),以前我是写在存储过程的,发觉修改不易,且有点混乱,所以我想写在业务层,那么我在初试(TransactionScope)时,发现需要开启MSDTC分布式事务,这个方式大家用的多吗?是不是最佳方式?3.接上面,对于TransactionScope,就一个数据库,而且在本机,怎样才能不启用msdtc而使用事务,大家的解决方案是什么?4. 对于事务处理有更好的想法推荐吗?附加:
数据访问层,使用sqlhelper,每次crud结束后连接都会关闭。谢谢各位百忙之中抽时间回复:)

解决方案 »

  1.   

    事务在业务逻辑层实现可以很灵活的控制,存储过程控制不方便,建议参考spring
      

  2.   

    在三层架构中,BLL层一般会用到事务
    可以在dal中声明一个属性来包装Transaction, 
    然后bll中可以得到
    using (TransactionScope scope = new TransactionScope())
            {
                //业务代码
                scope.Complete();
            } 
      

  3.   

    不启用msdtc就用SqlTransaction 
      

  4.   


    不需要更“全面”了,你能使用好就不错了。如果不去用IDbTransaction、DbTransaction、OdbcTransaction、OleDbTransaction、SqlTransaction之类的,就自然上了你老师的当。你的老师让你永远只知道写点存储过程,而不知道软件设计。也有许多软件系统是从来不用存储过程的。最重要地,你可以自己写一种IDbTransaction子类,甚至自己设计一个数据库DAL接口规范,你的老师跟刚毕业的大多数业余开发者无异。
      

  5.   

    上面引用错了,应该引用4楼的。使用TransactionScope比较麻烦,不具有嵌入式的优势。一般来说,应该仅使用.net framework中东西,不能把那种离不开msdtc的东西作为抽象标准(而只能作为你编程的工厂类的子类)。