SqlBulkCopy 是否在环境事务中登记?

Does SqlBulkCopy Enlist in Ambient Transaction?

我似乎找不到关于此的明确答案。我有一个 SqlBulkCopy 操作,它与许多其他操作一起包装在 TransactionScope 中。

我知道 SqlBulkCopy 构造函数中允许传递 SqlTransaction 对象的重载。假设我没有在构造函数中传递事务,命令会自动参与由 TransactionScope 创建的环境事务吗?

我做了一些测试,看起来 SqlBulkCopy 实际上支持环境事务,至少在 .Net 4.5 中是这样。

为了测试,我在调试时执行了 SqlBulkCopy 操作,并验证了行是否已进入数据库(通过 NOLOCK/dirty 读取查询)。然后我在下一行代码中抛出异常,并允许 TransactionScope 回滚。然后我验证了这些行不再在数据库中。