Използване на TransactionScope с първо код на Entity Framework и универсални доставчици

Опитвам се да настроя транзакция, при която моят код създава нов потребител с помощта на доставчика на членство и след това продължава да създава обект и да го поставя в една от моите таблици на 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();

person user1270224    schedule 15.03.2012    source източник


Отговори (1)


Както казвате, дори използвате един и същ низ за връзка както за EF, така и за членство, те използват различни връзки, след което обхватът на транзакцията автоматично ескалира до DTC

И доколкото знам, използвайте една и съща връзка и за двете

не е възможно да поставите персонализирана връзка в SqlMembershipProvider

според тази връзка

за да избегнете включването на DTC

person raoof hojat    schedule 09.04.2012