2009-11-23 35 views
4

我一直在阅读有关TransactionScope的内容,并对其与ADO.Net事务的互操作性有疑问。现在我们有一些数据访问方法,每个方法都会调用一个存储过程并开始并提交他们自己的单个事务。简单明了,样板的东西,方法是这样的:在TransactionScope中使用ADO.Net事务?

sqlCommand = //create SQLCommand with Stored proc 
SqlTransaction myTransaction = myConnection.BeginTransaction(); 
sqlCommand.Transaction = sqlTransaction; 
sqlCommand.Execute(); 
sqlTransaction.Commit(); 

我已经简化的东西一点,但你的想法。

我现在需要连续调用其中的两个类方法,并将它们作为一个团队从我的业务层提交或回滚。我无法修改数据方法,所以我正在考虑将这两个调用放在TransactionScope块中。

如果我这样做,创建TransactionScope时应该使用什么样的参数?我已经使用TransactionScopeOption.RequiresNew选项尝试过了,事情似乎有效,但这只是我的尝试,我不确定是否要走。 (在这里我要指出的是,这些都是SQL事务完全是相同的SQL服务器上运行。)

我看到的TransactionScope具有构造选项处理COM +的交易。因为我正在使用ADO.Net事务,这与此有关吗?感谢您的建议。

回答

7

TransactionScope文档here是一个很好的开始。

基本上它使处理ADO级别的交易变得不必要。连接将自动考虑现有的环境交易(默认)。

请记住,您还可以更改连接的方式通过在连接字符串中的环境交易入伍。这link将提供更多的细节。

征募'true'。 true表示SQL Server连接池 自动在创建线程的当前 事务上下文中注册连接。

+1

msdn链接已死亡。一个问题是,如果连接创建在作用域之外,则需要通过调用'connection.EnlistTransaction(Transaction.Current)'手动登录到环境事务。 – kristianp 2015-07-09 02:29:37

+0

永久链接!我已经链接到MSDN文档,并发布了代码段。 – micahtan 2015-07-17 20:13:26