Le code suivant jette un TransactionAbortedException
avec le message "La transaction a avorté" et un TransactionPromotionException
intérieur avec le message "Échec lors d'une tentative de promouvoir transaction":Membership.GetUser() dans TransactionScope lance TransactionPromotionException
using (TransactionScope transactionScope = new TransactionScope())
{
try
{
using (MyDataContext context = new MyDataContext())
{
Guid accountID = new Guid(Request.QueryString[ "aid" ]);
Account account = (from a in context.Accounts where a.UniqueID.Equals(accountID) select a).SingleOrDefault();
IQueryable <My_Data_Access_Layer.Login> loginList = from l in context.Logins where l.AccountID == account.AccountID select l;
foreach (My_Data_Access_Layer.Login login in loginList)
{
MembershipUser membershipUser = Membership.GetUser(login.UniqueID);
}
[... lots of DeleteAllOnSubmit() calls]
context.SubmitChanges();
transactionScope.Complete();
}
}
catch (Exception E)
{
[... reports the exception ...]
}
}
L'erreur se produit à l'appel au Membership.GetUser()
.
Ma chaîne de connexion est:
<add name="MyConnectionString" connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=MyDatabase;Integrated Security=True"
providerName="System.Data.SqlClient" />
Tout ce que j'ai read me dit que TransactionScope
devrait juste obtenir par magie appliquée aux appels d'adhésion. L'utilisateur existe (je m'attendrais à un retour null autrement.)
Que fait 'GetUser'? Si vous recherchez simplement des choses, quel est le besoin de 'TransactionScope'? – shahkalpesh
GetUser() fait partie de l'API Microsoft Membership. J'ai supprimé beaucoup de code qui supprime toutes les connexions pour un compte, puis le compte lui-même, pour des raisons de lisibilité. –