我正在使用从IBindingList派生的类,通过NHibernate使用延迟加载将第三方WinForms网格数据绑定到数据库。
目前,为了使延迟加载工作,我需要始终保持NH会话打开,这样当用户点击网格中的新行时,会有一个会话可用于加载对象图的其余部分选中的对象。
然而,很多人认为这是不好的做法。
所以,我想知道我是否可以以某种方式挂钩到IBindingList来拦截源自网格的数据提取,并动态创建和丢弃会话。
我在对象浏览器中快速查看了IBindingList,唯一看起来似乎合理的是在IList中覆盖索引器(“this [int]”)< T>。
这是一种可行的方法,还是有更好的方法?
答案 0 :(得分:1)
为了我,你提出的是最好的方法。我过去使用它,我建议判断一个“页面”大小,如果尚未缓存,则在索引器中加载整个页面。使用SetMinResult,SetMaxResults来填充记录页面,并保留已存在的页面的undelyng字典。一些小黑客要记住:删除更改排序/过滤器时缓存的所有项目。我在这里写了一篇关于我的解决方案的帖子:
http://www.felicepollano.com/Trackback.aspx?guid=831f463b-f3cf-47e4-b210-b80f6c6d1b32 这不完美但工作;)。您可以在u nofficial NHibernate addins中找到更多示例(我认为)。