Alternative TransactionScope sans DTC

existe-t-il une alternative à transactionScope qui ne nécessite pas d’activer le DTC?

Dans la transaction, je dois effectuer deux opérations:

  1. Créer un utilisateur (à l’aide de l’appartenance – fournisseur d’adhésion SQL)
  2. Effectuez une opération d’insertion.

TransactionScope utilise le gestionnaire de transactions LTM – Lightweight Transaction Manager en .Net. Si vous ouvrez plusieurs connexions dans la même transaction ou si vous vous connectez entre plusieurs bases de données, TransactionScope doit promouvoir la transaction au sein du gestionnaire de DTC basé sur 2PC.

Pour MS SQL Server 2008 et les versions ultérieures, le DTC ne sera impliqué que si vous ouvrez des connexions à différents DB. OU si vous ouvrez des connexions dans les mêmes transactions à partir de plusieurs threads, SAUF si vous utilisez DependentTransaction ce que vous devez inscrire dans votre transaction globale si vous souhaitez effectuer un thread.

En guise d’accompagnement: j’ai un peu de soutien pour l’histoire multi-threading dans Castle.Transactions .

Point secondaire n ° 2: Si vous utilisez TransactionScope, assurez-vous de déclarer explicitement IsolationLevel, sinon vous sérialiserez toutes vos transactions (IsolationLevel.Serializable)!

Ajoutez Enlist=false dans la chaîne de connexion de votre abonnement.

 connectionSsortingng="Data Source=xxx;Initial Catalog=xxx;Persist Security Info=True;User ID=xxx;Password=xxx;Enlist=false" 

Ceci est mon cas d’utilisation:

 using (TransactionScope tScope = new TransactionScope()) { MembershipCreateStatus createStatus; Membership.CreateUser(model.Email, model.Password, model.Email, null, null, true, model.Id, out createStatus); if (createStatus == MembershipCreateStatus.Success) { Roles.AddUserToRole(model.Email, "Administrator"); _UpdatePersonnelAccess(model); _UpdatePersonnelHasAccess(model); _SendEmail_Welcome(model); PersonSessionLog.ManageSession(model); } else ViewBag.Message = "Error"; tScope.Complete(); } 

Mon application est publiée dans Amazon EC2 alors que la firebase database est dans Amazon RDS. Le DTC n’est pas pris en charge dans le système RDS, c’est pourquoi j’ai également eu besoin d’un moyen d’empêcher toute escalade vers DTC. Au fait, j’utilise SQL Server 2008 R2. J’ai 2 bases de données – ASPNETDB, DB de données

Merci à Paul Post !