Коллеги, приветствую!
У меня в приложении есть примерно вот такой код
public static bool DoLargeOperation()
{
bool res = true;
res = res && DoFirstSubOperation();
res = res && DoSecondSubOperation();
res = res && DoThirdSubOperation();
return res;
}
Каждая из внутренних функций имеет примерно такой вид:
public static bool DoFirstSubOperation()
{
using (var context = new EntityFrameworkContext())
{
// Изменение данных.
context.SaveChanges();
}
}
Допустим, что первые две внутренних функции выполнились без ошибок, а вот третья вызвала исключение.
Каким образом мне отменить результат выполнения первых двух функций?
Вот такой подход не принёс результатов:
using (var transaction = new TransactionScope())
{
res = res && DoFirstSubOperation();
res = res && DoSecondSubOperation();
res = res && DoThirdSubOperation();
}
Единственное решение, которое я вижу - это объявлять контекст в методе вот так:
public static bool DoLargeOperation()
{
bool res = true;
using (var context = new EntityFrameworkContext())
{
using (var transaction = context.Database.BeginTransaction())
{
res = res && DoFirstSubOperation(context);
res = res && DoSecondSubOperation(context);
res = res && DoThirdSubOperation(context);
if (res)
{
transaction.Commit();
}
else
{
transaction.Rollback();
}
}
}
return res;
}
Но допустим ли такой вариант, или есть какой-то другой путь?