如果您查看AdoTransaction
(ref)中的以下代碼,您將看到NH在嘗試提交時如何對錯誤做出反應。
if (session.FlushMode != FlushMode.Manual)
{
session.Flush();
}
NotifyLocalSynchsBeforeTransactionCompletion();
session.BeforeTransactionCompletion(this);
try
{
trans.Commit();
log.Debug("DbTransaction Committed");
committed = true;
AfterTransactionCompletion(true);
Dispose();
}
catch (HibernateException e)
{
log.Error("Commit failed", e);
AfterTransactionCompletion(false);
commitFailed = true;
// Don't wrap HibernateExceptions
throw;
}
catch (Exception e)
{
log.Error("Commit failed", e);
AfterTransactionCompletion(false);
commitFailed = true;
throw new TransactionException("Commit failed with SQL exception", e);
}
finally
{
CloseIfRequired();
}
雖然事務沒有顯式回滾,但它當然沒有提交。因此,我認爲你的問題的答案是肯定的,等待數據庫更改將被回滾。
有意思的是,Flush()
的電話沒有包含在try
中。因此,值得注意的是,這裏捕獲的異常可能會使Session
處於不可預知的狀態。因此,guidance處理異常。
請仔細閱讀上面的鏈接,確保您正確地處理交易,如果可能,請使用「使用」聲明。 –