У меня есть проблема, которой я хотел бы поделиться. Контекст немного запутан, поэтому я постараюсь объяснить все, что в моих силах.
Мне нужно создать транзакционную операцию над несколькими объектами. Я работаю с EF CodeFirst, но с устаревшей базой данных, которую я не могу изменить.Чтобы создать более согласованную модель, чем предоставляет база данных, я проецирую информацию из базы данных в более точные объекты, которые я создал самостоятельно.
Поскольку мне нужно использовать разные контексты, моей первоначальной идеей было использовать TransactionScope, который раньше давал мне хорошие результаты. Зачем мне нужны разные контексты? Из-за различных проблем с db я не могу делать обновления только за одну операцию (UnitOfWork). Мне нужно получить разные идентификаторы, которые появляются только после SaveChanges ().
using (var scope = new TransactionScope())
{
Operation1();
Operation2();
Operation3(uses ExecuteStoreCommand)
SaveChanges();
Operation4();
SaveChanges();
}
Я знаю, что для использования TransactionScope мне нужно использовать одно и то же соединение для всех операций (и я делаю это, передавая контекст объектам). Однако, когда я выполняю одну из операций (которая использует ExecuteStoreCommand) или пытаюсь выполнить какое-то обновление после первого SaveChanges, я всегда получаю ошибку MSDTC (поддержка распределенных транзакций отключена) или даже реже , как выгруженные домены .
Я не знаю, может ли кто-нибудь мне помочь, по крайней мере, чтобы узнать, какое направление лучше всего для этого сценария.
Большое спасибо,