我的应用程序中有以下代码:
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);
}
这段代码触发了Database类的Dispose()方法,而该方法会将事务自动提交到数据库中,但这会导致我的数据库处于不一致的状态,因为答案被清除了,但问题和投票没有被清除。
有没有办法在Dispose()方法中检测它是因为异常而被调用,而不是常规的关闭块结束,这样我就可以自动回滚了呢?
我不想手动添加try ... catch块,我的目标是使用using块作为一个逻辑安全的事务管理器,如果执行正常则提交到数据库,如果出现任何异常则回滚。
你对此有什么想法吗?
Dispose
方法中检查异常是一个不好的想法。 - Steven