NHibernate FlushMode-为什么可以';不要把所有没救的东西都赶出去?

NHibernate FlushMode-为什么可以';不要把所有没救的东西都赶出去?,nhibernate,Nhibernate,我花了一些时间搜索如何配置NHibernate的FlushMode,以便它只能保存我明确称为save/Update/Delete的对象,但我发现我不能这样做。取而代之的是,在使用NHibernate事务管理时,我必须逐出我修改过的每个对象(即使没有调用Save/Update/Delete) 我完全理解为什么NHibernate必须在一些查找操作之前刷新一些对象,但我并不担心过时的数据。我看到,也许在某些情况下,刷新所有被修改但未明确保存的内容是有用的,但这不是我的情况 我只是希望,在提交我的会话

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

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

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

先谢谢你


菲利佩不这么认为。暂时对象和持久对象之间存在区别,持久对象在刷新会话时与数据库同步(可能在其他时间)。使用NH检索的对象是持久的,在刷新会话而不调用Save(或SaveOrUpdate)时将保存这些对象,因为它们已经是持久的。有几个选项可以控制FlushMode,但没有任何选项可以让它按您希望的方式工作

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

你想解决什么问题?

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

会话的整个想法(除其他外)是允许自动脏跟踪,因此您不必担心更改了什么;只有添加和非级联删除是手动的


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

Jamie,首先感谢您。我试图将从DTO(瞬态)创建的对象与在我的服务层中加载的对象(瞬态)进行比较,但这是一个很长的故事。:)我们可以通过驱逐生存下来,我理解你的观点,但我仍然认为在ISession和IStatelessSession之间平均一点是有用的