请检查下面的代码示例,我想要一个类型进程和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类)它自动打开和关闭它的连接。)所以上面的代码是我实际代码的解释。
答案 0 :(得分:1)
使用DTC,它将像您的数据库层和数据库之间的层一样。这意味着在调用.Complete()之前,不会应用对db所做的任何更改。使用哪个连接以及事务涉及多少数据库无关紧要。
确保调用.Complete()和事务结束。甚至你可以拥有嵌套的交易范围
Scope1 Scope2 Scope3
在上面,每当调用Scope1.Complete时,即使子范围调用完成,数据也将被移动到数据库