Я пытаюсь настроить транзакцию, в которой мой код создает нового пользователя с использованием поставщика членства, а затем продолжает создавать объект и помещать его в одну из моих Entity Framework столы. Если операция EF завершается неудачно, я хочу иметь возможность отката до того, как пользователь будет создан. У меня есть единственная строка соединения для EF и членства, поэтому я думаю, что обе операции должны использовать одно и то же соединение sql.Использование TransactionScope с Entity Framework первым и универсальным провайдером
Когда я первый запустить его, я получаю
"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();