很多例子了數據庫事務的主張有明確的回退,沿着線:顯式事務回滾是否必需?
using (var transaction = ...)
{
try
{
// do some reading and/or writing here
transaction.Commit();
}
catch (SqlException ex)
{
// explicit rollback
transaction.Rollback();
}
}
不過,我傾向於這樣做:
using (var transaction = ...)
{
// do some reading and/or writing here
transaction.Commit();
}
當異常發生時,我只是憑着隱式回滾未提交的事務。
依賴這種隱式行爲是否存在問題?有沒有人有一個令人信服的理由,爲什麼我不應該這樣做?
您的問題中的示例代碼可以說是有缺陷的,因爲它不會重新拋出。也許忘記這種傾向是避免這種模式的理由? :) – 2010-02-17 15:30:24
誰說你想重新拋出?在很多情況下,回滾事務可以被視爲處理異常。 – 2010-02-17 16:08:47
你提出了兩個不同的「選項」。對於第一個行爲像第二個,它必須重新拋出。爲了相當,兩個例子中的一個需要改變。 – 2010-02-17 17:54:40