我有一個我經常碰到的場景。與標準的ADO交易相比,使用 很簡單,但與NH(我知道)沒有太大關係。在活動事務中執行Flush()
我有2個表來更新。第一個包含配置文件信息 (配置文件),另一個(工作)包含需要進行的記錄更改 以及這些更改的狀態。對於 配置文件表的每次更新,工作 表中的狀態都會更新。
- 如果更新配置文件表失敗,我需要更新工作表上的 狀態。
- 如果更新配置文件表成功,並且更新到 工作表失敗,則需要回滾該事務。
問題是,我不知道更新配置文件表 失敗,直到我提交事務。我嘗試在 配置文件上執行刷新以捕獲異常,以便我可以將狀態寫入工作 表中,但隨後由於 配置文件更新導致的異常導致我的Commit失敗。
我該如何處理?在典型的ADO交易中,我的第一個電話 將拋出,但我可以捕獲並仍在更新 交易中的其他表。
下面是我的代碼的樣子 - 很標準。這不是我的 實際的代碼,所以請專注於問題,並不是說我不 處置我的交易或關閉我的會議):
try
{
ITransaction trans = _session.BeginTransaction();
var work = _repo.GetWork();
var profile = _repo.GetProfile(work.ProfileId);
try
{
profile.UpdateWithNewValues(work);
_session.SaveOrUpdate(profile);
_session.Flush();
work.Status = "Success";
}catch{
work.Status = "Failure";
}
_session.SaveOrUpdate(work);
trans.Commit();
}catch{
trans.Rollback();
}
我認識到,同花順()是行不通的,但我不知道 如何做到這一點。
是的,我意識到,但希望得到一個更簡單的答案。這實際上是一個批處理過程,所以我省略了相關的細節。感謝您的建議。 – 2010-09-15 13:51:47