我使用nHibernate获得了MVC应用程序的数据持久性,但出于某种原因,尽管从会话中驱逐了我的对象,它仍然被持久化到数据库。
我有一个复杂的对象,我让用户应用更改并根据父对象上属性的新值重新计算子集合。但是我不希望这些更改持续存在,因为我将结果更改传回视图,仅作为预览呈现。用户可以使用不同的操作提交它们。
在我在这个过程中查询nHibernate我的对象之后,我立即将其从会话中逐出,但由于某种原因,它仍然存在。
根据nHibernate Profiler,它似乎是由于我在过滤器中的一个事务提交来装饰我的Controller Action。这是因为我读到的有关从数据库读取的项目未被缓存到二级缓存的最佳实践,除非提交了事务,即使没有进行任何修改。即便如此,它也无法解释为什么提交会导致被驱逐的对象持续更改数据库。我假设我遗漏了一些可以解释这种行为的东西,但我不确定是什么?
答案 0 :(得分:0)
我是对的,你正在查询一个对象,然后从会话中逐出它并对用户预览进行更改?
您是否也在改变儿童收藏品?因为据我记忆,当从NH驱逐对象时,它不会自动驱逐相关的子对象(至少在NH v2.x中)。
因此,当您更改某个子对象(并且您没有明确驱逐它)时,它会尝试保留它,并且由于某些级联规则也会尝试保留父对象。