事务升级
适用范围:SQL Server
事务 升级 描述了一个轻量级本地事务,可根据需要自动提升为完全可分发的事务。 当在服务器上的数据库事务内调用托管存储过程时,会在本地事务的上下文中运行公共语言运行时 (CLR) 代码。 如果在数据库事务中打开与远程服务器的连接,则与远程服务器的连接 登记到分布式事务,本地事务会自动提升为分布式事务。
因此,事务提升通过延迟创建分布式事务来最大程度地减少分布式事务的开销,直到需要它为止。 如果事务升级是使用 Enlist
关键字启用的,则事务升级是自动的,并且不需要开发人员的干预。 适用于 SQL Server 的 .NET Framework 数据提供程序支持通过 .NET Framework System.Data.SqlClient
命名空间中的类进行处理的事务升级。
Enlist 关键字
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。