2010-11-26 17 views
0

Comment gérer une transaction dans une étendue à l'aide de la bibliothèque Enterprise. J'ai 3 procédures stockées, que j'ai besoin d'exécuter dans une seule portée. Je ne veux pas utiliser l'espace de nom System.TransactionTransaction dans la bibliothèque d'entreprise

+1

OK, la question doit être posée ... * Pourquoi * ne voulez-vous pas utiliser l'espace de noms 'System.Transactions'? –

Répondre

0

Vous pouvez appeler la méthode BeginTransaction sur un objet de connexion pour obtenir un objet DbTransaction. Utilisez ensuite les surcharges de l'objet Entlib Database qui prennent un DbTransaction. Cependant, c'est une douleur énorme à gérer. Vous aurez besoin de créer et de fermer manuellement au moins une connexion plutôt que de compter sur Entlib pour faire la bonne chose, et vous devrez passer l'objet DbTransaction à tout ce qui en a besoin.

TransactionScope est vraiment la bonne réponse ici. Si vous avez un scénario de blocage qui vous empêche vraiment de l'utiliser et qui n'est pas une politique d'entreprise décadente, j'aimerais savoir ce que c'est.

+0

Juste pensé à une alternative. Si ce sont toujours ces trois sprocs dans le même ordre, créez simplement un troisième sproc qui les appelle dans le bon ordre pour vous, puis gérez la transaction complètement dans le serveur de base de données; le nouveau sproc ferait "Begin Trans exec sproc1 exec sproc exec sproc3 Commit Trans" ou quelque chose comme ça (mon sql n'est pas génial). –