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