目前我正在研究一个由其他人编写的项目,并且众所周知 NHibernate 部分可能没有很好地实现。我在实习期间被要求改进这一点,但我对 NHibernate 也很陌生。我遇到了一些代码部分,在选择后有一个 Flush,在我看来这完全没用,对吗(问题 1)?我几乎阅读了完整的 NHibernate 文档,但我不确定我是否理解所有内容。
我应该在选择之前刷新(问题 2)吗?我的想法是,当我在刷新后选择时,数据将是最新的。
(目前该程序根本不使用任何交易 - 我看到那里有很大的改进空间)
目前我正在研究一个由其他人编写的项目,并且众所周知 NHibernate 部分可能没有很好地实现。我在实习期间被要求改进这一点,但我对 NHibernate 也很陌生。我遇到了一些代码部分,在选择后有一个 Flush,在我看来这完全没用,对吗(问题 1)?我几乎阅读了完整的 NHibernate 文档,但我不确定我是否理解所有内容。
我应该在选择之前刷新(问题 2)吗?我的想法是,当我在刷新后选择时,数据将是最新的。
(目前该程序根本不使用任何交易 - 我看到那里有很大的改进空间)
NH官方文件说:
9.7.1。刷新会话
如果您碰巧使用的是 ITransaction API,则无需担心这一步。它会在事务提交时隐式执行。否则,您应该调用 ISession.Flush() 以确保所有更改都与数据库同步。
您应该始终使用 transactions,即使是读取。
如果您不使用事务,则应在写入后使用 Flush。
阅读后对 Flush 没有任何意义。
看看这两个 答案,一切都得到了很好的解释。