NHibernate:一个会话中的更新不会反映在另一个会话中

时间:2011-01-18 17:53:27

标签: .net wpf nhibernate

这是一款WPF应用。我每个演示者使用一个会话。用户从一个演示者导航到另一个演示者但通常不超过2个级别:

  1. 打开Presenter1(会话1) - >显示实体列表
  2. 导航到Presenter2(Session2)(Presenter1和Session1仍然存在)
  3. Presenter2(Session2) - >编辑实体
  4. 导航回Presenter1。 Session2已关闭,更改将保留在数据库中
  5. Presenter1重新加载实体列表,但步骤3中所做的更改不存在
  6. 我该如何解决这种情况?

1 个答案:

答案 0 :(得分:3)

这是因为Session包含通常称为第一级缓存的内容。它只包含Session在其生命周期中“看到”的所有实体,以避免从数据库中重新获取它们。

在进行任何查询之前,您可以使用session.Clear()清除会话。如果您在每次导航操作后在演示者中执行此操作,则应该没问题。

另一种方法是定义一个管理Session的SessionManager类,以便两个演示者共享他们的Session。这可能是最好的解决方案,如果你能找到一些方法来定义一个Session的生命周期(我不建议在整个程序执行期间保持相同的Session)。