Tout d'abord, il y a aucune transaction imbriquée dans SQL Server . C'est important.
Deuxièmement, les deux TransactionScopes utilisent conn1, donc vous (au niveau SQL Server) incrémentez @@TRANCOUNT
pour chaque BEGIN TRANSACTION
Explication simple :la transaction interne est validée lorsque la transaction externe est validée, car l'annulation de l'intérieur annulerait les deux opérations
Autrement dit, COMMIT TRANSACTION
(sous-entendu par .Complete
et .Dispose
) décrémente @@TRANCOUNT
tandis que ROLLBACK TRANSACTION
(sous-entendu par .Dispose
seulement) le ramène à zéro. Ainsi, la restauration interne est supprimée car "aucune telle chose que les transactions imbriquées"
Si vous aviez utilisé conn2 correctement dans la portée interne, cela fonctionnerait comme prévu car les 2 transactions ne sont pas liées au niveau du serveur de base de données. C'est là que ça compte...