.NET TransactionScope class and T-SQL TRAN COMMIT and ROLLBA



我目前正在编写一个应用程序,该应用程序需要为我的业务实体进行多次插入、更新和删除。 我正在使用 TransactionScope 类来保证所有存储过程都可以作为单个工作单元提交或回滚。

我的问题是,如果我在 .NET 类库中使用 TransactionScope 类,我还需要使用 COMMIT TRAN 和 ROLLBACK TRAN 是我的每个存储过程?

不,如果使用事务范围进行事务,则不需要显式事务 - 但是:重要的是,您可能应该在连接字符串中设置Transaction Binding=Explicit Unbind;。完整的详细信息在这里,但否则你最终可能会回滚前几个操作,最后几个提交(或者更确切地说,在任何事务之外运行)。

> 在 2005 年没有必要,在 2000 年我会,而且,我通常将事务范围放在"using"块中。

在 2000 及更早版本与 2005 年之间使用它时存在一些性能问题。

看这里

谢谢

如果您

加入了TransactionScopeCommittableTransaction,那么我强烈建议您不要使用 begin transactionSqlConnection.BeginTransaction 显式创建自己的本地事务。

TransactionScope/CommittableTransaction是一个不同的"家庭",与begin transaction/SqlTransaction相互排斥

因此,我不同意赛义夫汗的观点。System.Transactions 确实在 Sql 2000 上存在性能问题,因此最好改用 SqlTransaction 或 begin transaction。但是,如果您这样做,那么您也不应该使用 TransactionScope/CommittableTransaction。

顺便说一下,Marc Gravell 描述的行为在 .Net 4.0 中已更改。即使不使用显式取消绑定,也不再可能回滚某些命令并提交某些命令。(但是他是正确的,在旧版本中您应该使用显式取消绑定)。

你不需要 - 它应该在事务范围内处理。它确实取决于你在做什么以及你如何处理交易(显式或隐式) 更多 这里

最新更新