Опитвам се да настроя транзакция, при която моят код създава нов потребител с помощта на доставчика на членство и след това продължава да създава обект и да го поставя в една от моите таблици на Entity Framework. Ако операцията EF е неуспешна, искам да мога да се върна до преди създаването на потребителя. Имам един низ за връзка както за EF, така и за членство, така че мисля, че и двете операции трябва да използват една и съща sql връзка.
Когато го стартирам за първи път, получавам
„MSDTC на сървъра... не е наличен.“
изключение на реда Membership.CreateUser. Когато стартирам услугата DTC, получавам
„Основният доставчик не успя при отваряне“
изключение с вътрешно изключение
„Операцията не е валидна за състоянието на транзакцията.“
на същата линия. Ако променя реда и първо направя EF запазването и след това членството, EF частта работи, но CreateUser се проваля със същите изключения.
Изглежда, че се използват 2 sql връзки, въпреки че имам един низ за връзка. Има ли начин да принудите операциите за членство и EF да използват една и съща връзка или има някакъв друг начин да поставите това вътре в транзакция?
Ето го кода
using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
{
MembershipCreateStatus createStatus;
MembershipUser user = Membership.CreateUser(model.UserName, model.Password, model.UserName, null, null, true, null, out createStatus);
//add objects to the DbContext db
db.SaveChanges();
scope.Complete();