我们在设置MSDTC时一直存在一些问题,现在正在考虑用SqlTransactions
替换SystemTransactions
。
我感兴趣的是上述差异,以及我们在这样做时可能遇到的问题。
Massimiliano引用的这篇文章引用时只有7岁,因此只引用.NET 2.0和SQL Server 2000和2005。然而,我相信这些要点对以后的版本仍然有效。我很难在以后的版本中找到任何更改的直接适用评论。
在SQL Server 2008及更高版本中,与旧版本相比,针对单个数据库的System.TransactionScope事务似乎不太可能升级为DTC。
相关:SqlClient、System.Transactions、SQL Server 2008和MARS
因此,根据您的SQL Server版本,使用针对单个数据库的System.Transactions时或多或少会遇到DTC问题。
System.Transactions的代码比SqlTransactions的轻,但处理开销更高,并且您的控制不那么明确。
System.Transactions
不是SqlTransaction
的替代品。
但就单个数据库而言,基于ADO.NET 2.0 System.Transactions的事务和常规SqlTransaction之间的最大区别是"隔离级别"。然而,这是一个很大的区别。让我稍后讨论隔离级别,但在此之前,您必须意识到,在Sql 2k中,即使只涉及一个数据库,事务也将由MSDTC管理。对于Sql2k5,事务由LTM管理,直到连接到不同数据库的第二个SqlConnection出现为止。当这种情况发生时,事务会从LTM提升到MSDTC
http://dotnetslackers.com/SQL/re-3463_SqlTransaction_vs_System_Transactions.aspx