5

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

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

4

4 回答 4

8

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

于 2008-10-10T06:39:31.233 回答
2

在 2005 年没有必要,在 2000 年我会,另外,我通常将事务范围放在“使用”块中。

在 2000 和更早版本与 2005 上使用它时存在一些性能问题。

这里

谢谢

于 2008-10-09T23:25:22.857 回答
1

如果您参加了TransactionScopeorCommittableTransaction那么我强烈建议您不要使用begin transactionor明确创建自己的本地事务SqlConnection.BeginTransaction

TransactionScope/是一个不同的“家庭”,并且与/CommittableTransaction互斥begin transactionSqlTransaction

因此,我不同意赛义夫汗。System.Transactions 在 Sql 2000 上确实存在性能问题,因此使用 SqlTransaction 或begin transaction代替可能会更好。但是,如果你这样做了,那么你不应该也使用 TransactionScope/CommittableTransaction。

顺便说一句,Marc Gravell 描述的行为在 .Net 4.0 中已经改变。即使您不使用 Explicit Unbind,也不再可能回滚一些命令并提交一些命令。(但是他是正确的,在旧版本中您应该使用 Explicit Unbind)。

于 2010-08-20T00:38:19.080 回答
0

您不需要 - 它应该在 TransactionScope 内处理。它确实有点取决于您正在做什么以及您如何处理事务(显式或隐式)更多在这里

于 2008-10-09T23:20:37.250 回答