Oracle
 sql >> Base de données >  >> RDS >> Oracle

EF et TransactionScope pour SQL Server et Oracle sans passer par DTC ?

Premièrement :ne jamais utiliser var ts = new TransactionScope() . Est le seul paquebot qui tue votre application. Utilisez toujours le constructeur explicite qui vous permet de spécifier le niveau d'isolement. Voir l'utilisation de la nouvelle TransactionScope() considérée comme nuisible.

Maintenant, à propos de votre question :la logique de ne pas promouvoir deux connexions dans la même portée dans DTC repose fortement sur la coopération des pilotes/fournisseurs pour informer le System.Transactions que les deux connexions distinctes sont capables de gérer la transaction distribuée très bien par eux-mêmes parce que les gestionnaires de ressources impliqués sont les mêmes. SqlClient post SQL Server 2008 est un pilote capable de faire cette logique. Le pilote Oracle que vous utilisez ne l'est pas (et je ne connais aucune version, d'ailleurs).

Finalement c'est vraiment vraiment vraiment basique :si vous ne voulez pas de DTC, n'en créez pas ! Assurez-vous d'utiliser exactement une connexion dans l'étendue. On peut clairement soutenir que vous n'avez pas besoin de deux connexions. En d'autres termes, supprimez les deux référentiels distincts de votre modèle de données. Utilisez un seul référentiel pour les commandes, l'inventaire et quoi d'autre. Vous vous tirez une balle dans le pied avec eux et vous demandez des solutions de poussière de lutin.

Mise à jour :pilote Oracle 12c r1 :

"Association de transaction et de connexion :les connexions ODP.NET, par défaut, ne se détachent des transactions que lorsque les objets de connexion sont fermés ou que les objets de transaction sont supprimés"