Я использую Entity Framework 5, и мне нужно выполнить несколько вызовов хранимых процедур в одной транзакции. Все они являются вставками, каждая из которых зависит от вывода предыдущего, и я хочу иметь возможность откатить все назад в случае сбоя одного из них. Каждый вызов использует один и тот же объект Entities. Первый вызов выполняется успешно, но следующий всегда завершается ошибкой со следующей ошибкой:
«Базовый провайдер не удалось открыть».
Внутреннее исключение: «Доступ к сети для диспетчера распределенных транзакций (MSDTC) отключен. Включите DTC для доступа к сети в конфигурации безопасности для MSDTC с помощью инструмента администрирования служб компонентов».
Внутреннее внутреннее исключение: «Диспетчер транзакций отключил поддержку удаленных / сетевых транзакций. (Исключение из HRESULT: 0x8004D024)»
Есть ли способ сделать это, не идя по дороге DTC?
Код:
ObjectParameter outputParam1 = new ObjectParameter("newEntity1", 0);
ObjectParameter outputParam2 = new ObjectParameter("newEntity2", 0);
using (var scope = new TransactionScope())
{
try
{
using(var context = new DatabaseContext())
{
context.f_createEntity1(outputParam1);
}
using(var context = new DatabaseContext())
{
context.f_createEntity2(ouputParam2, outputParam1.Value);
}
... other calls ...
scope.Complete();
}
catch (Exception ex)
{
... handle error ...
}
}