我目前正在编写一个需要为我的业务实体进行多次插入,更新和删除的应用程序。我正在使用TransactionScope类来保证所有存储过程可以作为单个工作单元提交或回滚。
我的问题是,如果我在.NET类库中使用TransactionScope类,我还需要使用COMMIT TRAN和ROLLBACK TRAN是我的每个存储过程吗?
答案 0 :(得分:8)
不,如果您的交易使用TransactionScope,则不需要显式交易 - 但是:重要您应该在连接字符串中设置Transaction Binding=Explicit Unbind;
。完整的详细信息是here,但除此之外,您最终可能会收到回滚的最初几个操作,最后几个提交(或者更确切地说,在任何事务之外运行)。
答案 1 :(得分:2)
答案 2 :(得分:1)
如果您加入TransactionScope
或CommittableTransaction
,我强烈建议您使用begin transaction
或{明确创建自己的本地交易 {1}}。
SqlConnection.BeginTransaction
/ TransactionScope
是一个不同的“家庭”,与CommittableTransaction
/ begin transaction
因此,我不同意Saif Khan。确实,System.Transactions在Sql 2000上存在性能问题,因此最好使用SqlTransaction或SqlTransaction
。但是,如果您这样做,那么您也不应该使用TransactionScope / CommittableTransaction。
顺便说一句,Marc Gravell描述的行为在.Net 4.0中已经改变了。即使您不使用显式解除绑定,也不再可能回滚某些命令并提交一些命令。 (但他是正确的,在旧版本中你应该使用Explicit Unbind)。
答案 3 :(得分:0)
您不应该 - 它应该在TransactionScope中处理。它确实取决于你正在做什么以及如何处理事务(显式或隐式)更多HERE