交易范围中有多个连接?

时间:2013-08-01 07:44:29

标签: c# transactions 3-tier

请检查下面的代码示例,我想要一个类型进程和B类型进程要么完成,要么都没有。下面的代码是否成功?

    using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required, new TimeSpan(0, 30, 0)))
        {  

con.Open();
//do A type process
con.Close();

con.Open();
//do B type process
con.Close();


    scope.Complete();
        }

PS :(请不要建议使用1 con,原因是我在此链接使用3层架构(http://geekswithblogs.net/edison/archive/2009/04/05/a-simple-3-tier-layers-application-in-asp.net.aspx),并使用函数调用AB类型进程(genericdata类)它自动打开和关闭它的连接。)所以上面的代码是我实际代码的解释。

1 个答案:

答案 0 :(得分:1)

使用DTC,它将像您的数据库层和数据库之间的层一样。这意味着在调用.Complete()之前,不会应用对db所做的任何更改。使用哪个连接以及事务涉及多少数据库无关紧要。

确保调用.Complete()和事务结束。甚至你可以拥有嵌套的交易范围

Scope1      Scope2           Scope3

在上面,每当调用Scope1.Complete时,即使子范围调用完成,数据也将被移动到数据库