DbConnection.EnlistTransaction是什么意思?
DbConnection.EnlistTransaction
允许:
System.Transactions.Transaction
中。它有一些限制:
System.Data.Common.DbTransaction
),则可能会因异常而失败。(这似乎取决于具体的连接实现:Firebird 2在这种情况下不会抛出异常,而SqlConnection
和大多数其他连接会抛出异常。)System.Transactions.Transaction
中,并且该事务仍然处于活动状态,则会因异常而失败。SqlConnection
,OleDbConnection
和OdbcConnection
重复连接到相同的事务。DbConnection
的实现可能会有所不同。例如,HanaConnection
(从 HANA 2 SP3 开始)会在此情况下抛出异常,这对于总是显式注册的代码而言非常不方便,尤其是当连接字符串中未禁用连接自动注册时。OdbcConnection
尝试使用该连接可能会失败并引发异常。)为此,请将事务设置为 null
。SqlCeConnection
会抛出 NullReferenceException
,而 SQLiteConnection
(至少到 v1.0.105)会抛出 ArgumentNullException
。DbConnection.EnlistTransaction
通常与System.Transactions.Transaction.Current
一起使用。如果连接在TransactionScope
内获得(打开),则无需使用它:在这种情况下,连接会自动加入当前事务(除非其连接字符串使用enlist=false
)。但是,再次强调,某些连接实现在此处可能会有所不同:一些默认情况下未启用自动注册,对此具有完全不同的语义(例如,在其6.0版本之前的FbConnection),或使用不同的连接字符串参数(例如,MySqlConnection
使用AutoEnlist
)。
它允许您在多个连接之间协调事务。如果您使用TransactionScope,则连接将自动注册到事务中。否则,您必须使用现有事务进行注册。