<分区>
DbConnection.EnlistTransaction 有什么作用?
<分区>
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),或者使用不同的连接字符串参数(例如使用 AutoEnlist
的 MySqlConnection
)。
关于c# - DbConnection.EnlistTransaction 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12863950/