【发布时间】:2010-09-14 18:22:39
【问题描述】:
我有一个我经常遇到的场景。这很简单 标准的 ADO 事务,但与 NH(据我所知)没有那么多。
我有 2 个表要更新。第一个包含个人资料信息 (Profile) 和另一个 (Work) 包含需要更改的记录 以及这些更改的状态。对于每次更新 Profile 表,Work 上的状态会有更新 表。
- 如果更新配置文件表失败,我需要更新 工作台上的状态。
- 如果对 Profile 表的更新成功,并且对 工作表失败,我需要回滚事务。
问题是我不知道是否更新到 Profile 表 在我提交交易之前失败。我试图做一个冲洗 配置文件以捕获异常,以便我可以将状态写入工作 表,但随后我的 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();
}
我意识到 Flush() 不起作用,但我不知道还有什么办法 这样做。
【问题讨论】:
标签: nhibernate transactions flush