事务作用域中有多个连接

本文关键字:连接 作用域 事务 | 更新日期: 2023-09-27 18:25:42

请检查下面的代码示例,我希望A型进程和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();
        }

p.S:(请不要建议使用1 con,原因是我在这个环节使用了3层架构(http://geekswithblogs.net/edison/archive/2009/04/05/a-simple-3-tier-layers-application-in-asp.net.aspx),而A-B类型的进程是用一个函数(genericdata类)调用的,该函数会自动打开和关闭它的连接。)所以上面的代码是对我实际代码的解释。

事务作用域中有多个连接

使用DTC,它将充当数据库层和数据库之间的一层。这意味着在调用.Complete()之前,对数据库所做的任何更改都不会被应用。实际上,使用哪个连接以及事务中涉及多少数据库并不重要。

请确保调用.Complete()并结束事务。或者甚至你可以有嵌套的事务范围

范围1范围2范围3

在上面,无论何时调用Scope1.Complete,数据都将被移动到数据库中,即使子作用域调用Complete