Следующий код выдает TransactionAbortedException
с сообщением «Транзакция прервана» и внутренний 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 ...]
}
}
Ошибка возникает при вызове Membership.GetUser()
.
Моя строка подключения:
<add name="MyConnectionString" connectionString="Data Source=localhost\SQLEXPRESS;Initial Catalog=MyDatabase;Integrated Security=True"
providerName="System.Data.SqlClient" />
Все, что я прочитал, говорит мне о том, что TransactionScope
должно просто волшебным образом применяться на членские звонки. Пользователь существует (в противном случае я ожидаю возврата null.)
GetUser
? Если вы просто спрашиваете о вещах, зачем нуженTransactionScope
? - person shahkalpeshp   schedule 21.03.2010