事务与TransactionScope的区别

18

我正在开发一个与 SQL Server 2005 数据库通信的应用程序来执行一些存储过程。我的客户要求所有事务由 C# 进行管理,而不是由 SQL Server 进行管理,因此在访问数据库时我使用了 System.Transactions.TransactionScope。然而,我刚刚看到了 System.Transactions.Transaction 数据类型,我感到困惑...每种类型的主要优缺点是什么?我应该使用哪一种?

请注意,我还必须使用企业库的数据访问应用程序块。


看起来像是 https://dev59.com/H3RB5IYBdhLWcg3wtZMV 的重复。 - Dave
1
请参见https://dev59.com/dHVC5IYBdhLWcg3wpS7g。 - Marc Gravell
1
我的客户要求...为什么?客户真正想要/害怕的是什么?几乎可以肯定,他们实际上并不直接想要那个 - 他们想要其他东西,并决定将事务强制转换为C#。"例如,我在某个地方读到SQL事务不可靠"...等等。我怀疑除非你了解他们真正想要什么,否则你将无法解决他们潜在的恐惧/欲望。 - Brondahl
一个简单的回答可能是:“我们有一位程序员只懂其中一种语言。” 或者更相关的是,他们希望所有修改数据库的代码都在同一个地方,这样更容易处理。这些“为什么为什么为什么”的评论非常不必要和无关紧要。 - John Lord
1个回答

20

来自 MSDN 的介绍:

TransactionScope 类提供了一种简单的方式,用于将代码块标记为参与事务,而无需与事务本身交互。事务范围可以自动选择和管理环境事务。由于其易于使用和高效性,建议在开发事务应用程序时使用 TransactionScope 类。当您实例化 TransactionScope 时,事务管理器确定要参与的事务。一旦确定,在该事务中始终参与该范围。决策基于两个因素:是否存在环境事务以及构造函数中的 TransactionScopeOption 参数的值。环境事务是您的代码执行的事务。您可以通过调用 Transaction 类的静态 Current 属性来获取对环境事务的引用。

您可以在此处阅读更多信息:

http://msdn.microsoft.com/zh-cn/library/ms172152(v=vs.90).aspx

http://msdn.microsoft.com/zh-cn/library/system.transactions.transactionscope(v=vs.90).aspx

关于 .NET 2.0 中的事务的很棒(有点过时)文章:

http://msdn.microsoft.com/zh-cn/library/ms973865.aspx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接