0

我在某处读到,在 C# 桌面应用程序中为每个表单/演示者使用新会话是个好主意。所以我决定每次标签索引更改时关闭会话。任何数据库活动都会打开一个新会话。我在每个选项卡中都有一个树视图,并且数据在它应该加载的时候准确地加载(例如,当打开相应的节点时)唯一的问题是当我离开一个选项卡页面并且树有一些打开的节点然后我回来时。

有两种不同的场景:

  • 我单击离开之前已经查看过的叶节点并重新访问该选项卡
  • 我单击了一个从未在该程序运行中查看过的叶节点(但我们可以看到它,因为父节点已展开)

在第一种情况下,一切正常。在第二种情况下,我得到一个 LazyInitialization 异常。

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

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

最好的问候, 期待

4

1 回答 1

1

当您使用现有数据提供树视图(引发未初始化异常)的选项卡时,将其重新附加到新创建的会话以重新启用延迟加载。使用不明显session.Lock(rootentity, LockMode.None);的重新附加对象图

于 2012-07-27T08:07:09.293 回答