Est-il possible pour moi d'annuler la transaction après avoir appelé scope.complete()? La transaction imbriquée fonctionnera-t-elle dans ce cas? Y a-t-il d'autres alternatives aussi? Je suis obligé d'ajouter scope.complete afin d'appeler MyService correctement. Mais je veux annuler la transaction à la fin.Rétrograder la transaction après l'appel de transaction.complete()
Répondre
Vous pouvez avoir des étendues imbriquées. Toutes les étendues doivent être complétées pour que la transaction se termine également. Scope! = Transaction. Ainsi, la portée interne pourrait être complète et la portée externe pourrait être annulée. Cela annulerait la transaction en vigueur.
Non, ce n'est pas comme cela que les transactions fonctionnent. Une fois que vous avez terminé une transaction, cette étendue est fermée et vous ne pouvez plus la réutiliser ailleurs. En outre, une fois la transaction terminée, elle ne peut plus être annulée.
Vous devez placer les deux transactions dans la même étendue pour pouvoir les terminer ou les restaurer ensemble.
La partie "Durabilité" des propriétés ACID des Transactions ne vous permettra pas de le faire. Transactions qu'une transaction validée ne peut pas être annulée. Appelez plutôt la méthode "BillImportProxy.ImportPendingUtilityBills" à partir de la même étendue de transaction.