事务升级
适用于:SQL Server
事务 升级 描述了一个轻量级本地事务,可根据需要自动提升为完全可分发的事务。 当在服务器上的数据库事务内调用托管存储过程时,会在本地事务的上下文中运行公共语言运行时 (CLR) 代码。 如果在数据库事务内打开到远程服务器的连接,则到远程服务器的连接会登记在分布式事务中,并且本地事务会自动升级为分布式事务。 因此,通过将分布式事务的创建延迟到需要创建时才进行,事务升级可以将分布式事务的开销降至最低。 如果已使用 Enlist 关键字启用事务升级,并且不需要开发人员干预,则事务升级是自动的。 用于 SQL Server 的 .NET Framework 数据提供程序支持通过 .NET Framework System.Data.SqlClient 命名空间中的类处理的事务升级。
登记关键字
SqlConnection 对象的 ConnectionString 属性支持 Enlist 关键字,该关键字指示 System.Data.SqlClient 是否检测事务上下文,并在分布式事务中自动登记连接。 如果此关键字设置为 True(默认设置),则会在打开的线程的当前事务上下文中自动登记连接。 如果此关键字设置为 False,则 SqlClient 连接不会与分布式事务交互。 如果未在连接字符串中指定 Enlist,则如果在打开连接时检测到连接,则连接将自动登记到分布式事务中。
分布式事务
分布式事务通常会使用大量的系统资源。 Microsoft分布式事务处理协调器(MS DTC)管理此类事务,并集成在这些事务中访问的所有资源管理器。 另一方面,事务升级是 System.Transactions 事务的特殊形式,它有效地将工作委托给简单的 SQL Server 事务。 System.Transactions、 System.Data.SqlClient 和 SQL Server 协调处理事务所涉及的工作,根据需要将其提升为完全分布式事务。
使用事务提升的好处是,当使用活动 TransactionScope 事务打开连接且未打开其他连接时,事务将提交为轻型事务,而不是产生完全分布式事务的额外开销。 有关 TransactionScope 的详细信息,请参阅使用 System.Transactions。