繁体   English   中英

NHibernate FlushMode Never问题

[英]Problems with NHibernate FlushMode Never

我们正在使用NHibernate作为ORM层来构建大型应用程序。 我们尝试了尽可能多的最佳实践,其中将FlushMode设置为Never 但是,这使我们感到痛苦,例如以下情形:

有一个带有结束日期列的表。 在此表中,我们删除最后一个记录(按结束日期):

  • 记录被删除;
  • 删除之后,我们(存储库)查询最后一条记录(按结束日期);
  • 最后一条记录已更新,因为它是新的活动记录。

这是一个非常简单的场景,其中有许多场景。 这里的问题是,当我们执行查询时,我们会找回删除的记录,这当然是不正确的。 这大致意味着,由于其响应,我们无法在业务逻辑中进行可能接触到要插入或删除的实体的查询。 还不在那里或仍然在那里。

我如何处理这种情况? 有什么方法可以解决此问题而无需恢复FlushMode设置,还是我应该完全放弃FlushMode设置?

我如何处理这种情况? 有没有办法解决此问题而无需恢复FlushMode设置

FlushMode.Never不会阻止您要处理最新数据时手动调用Flush() 我想这是在不更改FlushMode情况下解决此问题的方法

还是我应该一起放弃FlushMode设置?

您能否提供有关FlushMode.Never参考信息?在一般情况下,这不是一种好的做法吗? 看起来像FlushMode.Never适合处理大型的,大多数为只读的对象集。

http://jroller.com/tfenne/entry/hibernate_understand_flushmode_never

只有当您绝对需要细粒度的控制时, FlushMode.Never才是最佳实践。 FlushMode.Auto将覆盖99.99%的情况,而不会出现问题。 就是说,使用ISession.FLush()装饰CUD操作不会有什么坏处,因为如果内部操作队列中有任何CUD操作,则只涉及数据库往返

刷新模式Never意味着NHibernate永远不会刷新会话,这取决于您。 因此, session.Delete()实际上不会从数据库中删除记录,只是将对象标记为要在会话的缓存中删除。 您可以强制通过调用刷新session.Flush()调用后session.Delete()

我认为Auto是更好的选择,有了Auto ,NHibernate将在查询数据之前自动刷新会话。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM