我在某处读到,为C#Desktop应用程序中的每个Form / Presenter使用一个新的Session是个好主意。所以我决定每次Tab键变化时关闭会话。任何DB活动都会打开一个新会话。 我在每个选项卡中都有一个树视图,并且Data会在应该的时间内加载(例如,打开相应的Node时) 唯一的问题是当我离开Tabpage并且Tree有一些打开的节点然后我回来了。
有两种不同的情况:
在第一个场景中一切正常。 在第二个场景中,我得到了一个LazyInitialization Exception。
1)虽然会话已关闭,但是我可以强制节点加载数据或记住数据吗? 我不喜欢我只为程序使用一个会话的想法。
2)如果我记得树状态,折叠它并重新展开必要的节点,你认为它可能有用吗?它会像用户打开数据一样加载数据吗?
最好的问候,Expecto
答案 0 :(得分:1)
当你转到带有现有数据的选项卡时,树视图(抛出未初始化的异常)将其重新连接到新创建的会话以重新启用延迟加载。使用非显而易见的session.Lock(rootentity, LockMode.None);
重新附加对象图