Considérons ce scénario; supposons que j'ai une fenêtre WPF qui a quatre objets liés à ses contrôles (Schedule, Customer, Contract, ScheduleDetails et Signer spécifiquement) qui représentent quatre tables de base de données dans la base de données backend. Je veux quand la demande de l'utilisateur enregistrer pour l'information qu'il/elle a entré pour être joint dans l'opération d'atome dans d'autres mots toutes les opérations de sauvegarde soient dans une transaction ainsi toutes les opérations réussissent ou toutes échouent. Ma question est quelle est la manière la plus efficace pour représenter le fonctionnement des transactions dans ce scénarioComment enregistrer dans la transaction?
Répondre
Le le plus efficace est d'utiliser BeginTransaction
etc sur votre DbConnection
, mais cela ne convient pas, comme vous devez utiliser la même connexion, et chaque DbCommand
a besoin du transaction réglage etc.
le plus simple est TransactionScope
, et si vous êtes sur SQL Server 2005 ou au-dessus, vous remarquerez rarement une différence significative de performance entre ceci et BeginTransaction
:
using(var tran = new TransactionScope()) {
SaveA();
SaveB();
SaveC();
SaveD();
tran.Complete();
}
Ici, il n'a pas d'importance si SaveA
etc utiliser la même connexion, comme SqlConnection
solliciterons dans un TransactionScope
automatiquement.
Alternativement, laissez un ORM gérer ceci pour vous; la plupart vont créer des transactions pour enregistrer un groupe de modifications.
Une chose à regarder; TransactionScope
repose sur des services (DTC) qui peuvent ne pas être disponibles sur tous les clients (puisque vous mentionnez WPF, qui est côté client).
- 1. Comment enregistrer le contenu d'une transaction Spring
- 2. Transaction dans la transaction
- 3. Comment utiliser les transactions (commencer la transaction, valider la transaction)?
- 4. Transaction dans la bibliothèque d'entreprise
- 5. Niveaux ISOLATION dans la transaction
- 6. Enregistrement TSQL dans la transaction
- 7. Transaction distribuée terminée. Soit enrôler cette session dans une nouvelle transaction ou la transaction NULL
- 8. Supprimer la transaction dans la procédure stockée
- 9. Tronquer la table dans la transaction
- 10. comment obtenir transaction id du panier pour apparaître dans les détails de la transaction Paypal
- 11. Besoin d'aide dans la transaction SQL Rollback
- 12. Arrêter la transaction dans un thread
- 13. La transaction «Spring aop» ne valide pas la transaction
- 14. Comment enregistrer la parole dans l'iphone?
- 15. comment enregistrer la valeur nulle dans Subsonic
- 16. Comment enregistrer la vidéo dans l'iphone
- 17. Transaction dans firebird 1.5
- 18. Tables temporaires comment créer avant la transaction, puis utiliser la transaction interne
- 19. Comment trouver la transaction est réglée/Unsettled dans Authorize.net?
- 20. Comment faire multi transaction dans DBExpress
- 21. Comment implémenter une transaction dans vb.net?
- 22. Etat de la transaction dans JDBC
- 23. Utilisation de la transaction NHibernate dans SqlBulkCopy
- 24. Transaction dans LLBLGen Pro
- 25. Effectuer un appel EJB sans transaction dans une transaction
- 26. Création d'une transaction locale dans une transaction JTA Spring
- 27. CakePHP: comment enregistrer la session?
- 28. Enregistrer la boucle interne
- 29. Comment programmer une "transaction distribuée"?
- 30. comment enregistrer l'image dans cakephp
Si vous utilisez TransactionScope, assurez-vous que le service DTC - Distributed Transaction Coordinator fonctionne sur votre machine cible, sinon vous obtiendrez des exceptions. –
@Chris - Je viens d'éditer pour exactement cela ;-p –
@ Mark, Merci. Mais il y a une relation entre DTC et la classe Transaction - je ne me souviens pas quand il s'agit de l'image - mais je veux éviter le surcoût d'utiliser DTC, même si j'aime la forme simple de la classe Transaction. Y at-il un moyen de ne pas être enrôlé dans une transaction DTC? –