Opération atomique .net avec une DLL externe

Dans mon application .net, j'ai besoin d'utiliser une DLL externe qui m'a été fournie comme "close box". Je ne peux pas accéder ou modifier la DLL.

Je sais qu'il a sa propre transaction. Le problème est que quand j'appelle les methods de dll je ne peux pas passer ma connection / transaction à eux. Mais les opérations de mon application sur la database doivent être atomiques avec l'opération dll.

Les deux, mon application et la DLL travaillent sur la même database.

Il y a un moyen de résoudre ceci sans utiliser le TransactionScope ? Et, si la réponse est non, TransactionScope est-il une bonne solution à l'état de l'art?

METTRE À JOUR

J'ai essayé avec le TransactionScope :

 using (TransactionScope transactionScope = new TransactionScope()) { using (var connection = new OleDbConnection(DatabaseInfo.Instance.GetConnectionSsortingng(connectionStr)) { var sqlQuery = "select * from TEST_TABLE"; using (var dbCmd = new OleDbCommand(sqlQuery, connection)) { connection.Open(); var a = dbCmd.ExecuteNonQuery(); } } transactionScope.Complete(); } 

Mais sur la connection.Open() j'ai reçu cette erreur: Nouvelle transaction ne peut pas inscrire dans le coordinateur de transaction spécifié.

MISE À JOUR 2

J'ai résolu l'erreur ajoutant OLE DB Services = -7 (équivalent à enlist = false dans SqlConnection) à la fin de la string de connection. De cette façon, je désactive le pooling, l'enrôlement et les services de slider. Mais maintenant le problème est que la transaction est validée de toute façon, même si le transactionScope.Complete() n'est pas atteint lorsqu'une exception est levée.