如何在每个标签页之间切换时处理一个会话

时间:2012-07-25 12:03:12

标签: nhibernate session tabpage

我在某处读到,为C#Desktop应用程序中的每个Form / Presenter使用一个新的Session是个好主意。所以我决定每次Tab键变化时关闭会话。任何DB活动都会打开一个新会话。 我在每个选项卡中都有一个树视图,并且Data会在应该的时间内加载(例如,打开相应的Node时) 唯一的问题是当我离开Tabpage并且Tree有一些打开的节点然后我回来了。

有两种不同的情况:

  • 在我离开之前,我点击了一个叶子节点,然后重新访问了该标签
  • 我点击了一个从未在该程序运行中查看的叶节点(但我们可以看到它,因为父节点已展开)

在第一个场景中一切正常。 在第二个场景中,我得到了一个LazyInitialization Exception。

1)虽然会话已关闭,但是我可以强制节点加载数据或记住数据吗? 我不喜欢我只为程序使用一个会话的想法。

2)如果我记得树状态,折叠它并重新展开必要的节点,你认为它可能有用吗?它会像用户打开数据一样加载数据吗?

最好的问候,Expecto

1 个答案:

答案 0 :(得分:1)

当你转到带有现有数据的选项卡时,树视图(抛出未初始化的异常)将其重新连接到新创建的会话以重新启用延迟加载。使用非显而易见的session.Lock(rootentity, LockMode.None);重新附加对象图