Транзакционная операция с SaveChanges и ExecuteStoreCommand

У меня есть проблема, которой я хотел бы поделиться. Контекст немного запутан, поэтому я постараюсь объяснить все, что в моих силах.

Мне нужно создать транзакционную операцию над несколькими объектами. Я работаю с EF CodeFirst, но с устаревшей базой данных, которую я не могу изменить.Чтобы создать более согласованную модель, чем предоставляет база данных, я проецирую информацию из базы данных в более точные объекты, которые я создал самостоятельно.

Поскольку мне нужно использовать разные контексты, моей первоначальной идеей было использовать TransactionScope, который раньше давал мне хорошие результаты. Зачем мне нужны разные контексты? Из-за различных проблем с db я не могу делать обновления только за одну операцию (UnitOfWork). Мне нужно получить разные идентификаторы, которые появляются только после SaveChanges ().

using (var scope = new TransactionScope())
{
    Operation1();
    Operation2();
    Operation3(uses ExecuteStoreCommand)
    SaveChanges();

    Operation4();
    SaveChanges();
}

Я знаю, что для использования TransactionScope мне нужно использовать одно и то же соединение для всех операций (и я делаю это, передавая контекст объектам). Однако, когда я выполняю одну из операций (которая использует ExecuteStoreCommand) или пытаюсь выполнить какое-то обновление после первого SaveChanges, я всегда получаю ошибку MSDTC (поддержка распределенных транзакций отключена) или даже реже , как выгруженные домены .

Я не знаю, может ли кто-нибудь мне помочь, по крайней мере, чтобы узнать, какое направление лучше всего для этого сценария.

Большое спасибо,

5
задан Jacob 23 February 2012 в 11:35
поделиться