2011-03-09 4 views
2

TransactionScope a plusieurs restrictions: 1. IsolationLevel ne peut pas changer pendant la transaction 2. champs de transaction ne sont pas vraiment emboîtées ce que nous savons que les transactions imbriquéessur mesure TransactionScope

Est-il possible d'écrire TransactionScope personnalisé pour contourner ces restrictions ou sont-ils intégrés dans le noyau de System.Transactions et ne peuvent pas être changés?

Mise à jour. Sinon, pourquoi les gens créent-ils des TransactionScopes personnalisés? Quels problèmes permet-il de résoudre?

+0

Re 2 - comment voulez-vous dire? Ils sont * exactement * ce que j'attendrais des transactions DTC ... ou est-ce que vous avez l'intention d'annuler une transaction interne mais de faire une transaction externe? (que vous ne pouvez pas faire) –

+0

Mais que se passe-t-il si je veux émuler des transactions imbriquées lorsque je peux annuler une transaction interne sans annuler la transaction racine? – SiberianGuy

Répondre

1

Re votre 2ème point (et lire le commentaire); en effet, le «un échec, tout se résout immédiatement» est une partie inhérente de la DTC; la transaction externe complète est l'unité atomique. Vous pourriez être en mesure d'utiliser certaines transactions SQL régulières dans la transaction DTC, mais pour être honnête qui rend les choses complexes ...

Ma suggestion:

  • soit écrire le SQL pour réussir (c.-à rollback si quelque chose devient très malade, pas seulement pour la commodité des requêtes expérimentales)
  • ou: ne pas utiliser DTC

et je préfère le premier, comme rollback est cher (commit n'est pas cher).

(Je ne sais pas définitivement pour votre premier point, mais je crois qui est assez pierre comme)