NHibernate FlushMode - 为什么NH不能驱逐所有未保存的东西?

时间:2010-03-05 19:22:29

标签: nhibernate

我花了一些时间来搜索如何配置NHibernate的FlushMode所以它只能保存我明确称为Save / Update / Delete的对象,但我发现我不能这样做。而不是它,我必须驱逐我修改过的每个对象(即使没有调用Save / Update / Delete),因为我正在使用NHibernate事务管理。

我完全理解为什么NHibernate必须在一些Find操作之前刷新一些对象,但我并不担心过时的数据。我看到,也许,在某些情况下,刷新所有被修改的内容而不是明确保存可能是有用的,但这不是我的情况。

我只是想要这样,在提交我的会话之后,NHibernate会插入/更新/删除我明确要求的所有内容,并逐出其他所有内容。我的问题是:这种行为只是“没有人停止实施这个问题”的问题,还是存在另外一点如果存在这种行为会失败?

提前谢谢。

菲利普

2 个答案:

答案 0 :(得分:4)

Nhibernate并不这么认为。区别在于瞬态和持久对象,并且在刷新会话时,持久对象与数据库同步(可能在其他时间)。使用NH检索的对象是持久的,并且在刷新会话时将保存而不调用Save(或SaveOrUpdate),因为它们已经是持久的。控制FlushMode有几个选项,但没有任何选项可以让它按照你想要的方式工作。

潜在的解决方法可能是使用IStatelessSession检索对象并通过单独的ISession处理操作。

你想解决什么问题?

答案 1 :(得分:2)

你基本上都在问:“为什么我的锤子不像螺丝刀那样工作?”

Session的整个想法(除其他外)是允许自动脏跟踪,所以你不必担心改变了什么;只有添加和非级联删除是手动的。

正如Jamie所提到的,你可以使用IStateLessSession而不是ISession。它不会自动跟踪任何内容,也不支持延迟加载。您必须明确告诉它要插入,更新和删除的内容。它更多地用于只读和批处理上下文,但它可能正是你要找的,