我有一个我经常碰到的场景。与标准的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