如何在nhibernate中回滚对附加对象的更改?我们在更新/保存之前进行了验证(示例简化)..
var setting = Get("key")
setting.Value = "helo" //for whatever reason, this particular
//setting cannot have its value saved to the database
...
Verify(setting); //throws
base.Update(setting);
但是由于附加了对象,所以在会话中已经发生了任何更改,即使验证将被抛出,也永远不会到达Update。处理这个问题的正确方法是什么?
答案 0 :(得分:2)
这很可能是,因为周围的事务提交,即使抛出异常也是如此。或者您稍后捕获异常并隐藏周围事务中的错误。 每当刷新会话时,NH都可以执行更新,例如在执行查询之前。提交始终将内存状态与数据库同步。
只有尚未在会话中(但在数据库中)的实例才需要更新。会话中的所有内容都会同步到数据库,任何任何时间点,最迟在提交时。
NH的一个优点是所谓的“持久性无知”。这意味着,在将实例加载到内存后,您的逻辑不再关心持久性。你正在使用你的任何其他类,最后一切都将以原子方式持久化(或回滚)。
那么这对你的代码意味着什么呢?