В моем приложении есть следующий код:
using (var database = new Database()) {
var poll = // Some database query code.
foreach (Question question in poll.Questions) {
foreach (Answer answer in question.Answers) {
database.Remove(answer);
}
// This is a sample line that simulate an error.
throw new Exception("deu pau");
database.Remove(question);
}
database.Remove(poll);
}
Этот код запускает метод Dispose() класса Database как обычно, и этот метод автоматически передает транзакцию в базу данных, но это оставляет мою базу данных в несогласованном состоянии, поскольку ответы стираются, но вопрос и опрос отсутствуют.
Есть ли способ, который я могу обнаружить в методе Dispose(), который вызывается из-за исключения вместо обычного конца закрывающего блока, поэтому я могу автоматизировать откат?
Я не хочу вручную добавлять блок try... catch, моя цель - использовать блок использования в качестве логического безопасного менеджера транзакций, поэтому он берет на себя базу данных, если выполнение было чистым или откатывалось, если какое-либо исключение произошло.
У вас есть некоторые мысли по этому поводу?