2010-11-08 21 views
2

Dans ma demande je le schéma suivant:bloc .net scope transaction deuxième transaction

using (TransactionScope transaction = new TransactionScope(TransactionScopeOption.Required)) 
{ 
    Function1(); 
    Function2(); 
    Function3(); 
} 

Mon problen est que Function2 appelle une autre fonction qui se connecte à un autre DB ... et la transaction se distribue et je reçois une exception.

Y at-il un moyen dans le code dans lequel je peux faire un appel db qui ne fait pas partie de la transaction en cours? Mon code dans Function2 ne fait que lire ... donc je ne veux pas faire partie de la transaction en cours.

Merci, Radu

Répondre

3

Autour function2 vous pouvez créer une nouvelle transaction avec TransactionScopeOption.RequiresNew, forçant ainsi dans sa propre transaction distincte. Étant donné qu'une seule ressource (l'autre base de données) sera utilisée dans cette transaction, elle ne devrait pas être distribuée.

+0

et si je crée la seconde portée de transaction en tant que TransactionScope.Suppress Est-ce que j'ai perdu la transaction parente? –

+0

@RaduD Seulement dans le cadre de la portée de la transaction que j'attends (mais je voudrais tester pour confirmer cela). – Richard