我可以从IBindingList派生来促进NHibernate中的延迟加载吗?

时间:2011-03-28 19:38:25

标签: c# nhibernate data-binding

我正在使用从IBindingList派生的类,通过NHibernate使用延迟加载将第三方WinForms网格数据绑定到数据库。

目前,为了使延迟加载工作,我需要始终保持NH会话打开,这样当用户点击网格中的新行时,会有一个会话可用于加载对象图的其余部分选中的对象。

然而,很多人认为这是不好的做法。

所以,我想知道我是否可以以某种方式挂钩到IBindingList来拦截源自网格的数据提取,并动态创建和丢弃会话。

我在对象浏览器中快速查看了IBindingList,唯一看起来似乎合理的是在IList中覆盖索引器(“this [int]”)< T>。

这是一种可行的方法,还是有更好的方法?

1 个答案:

答案 0 :(得分:1)

为了我,你提出的是最好的方法。我过去使用它,我建议判断一个“页面”大小,如果尚未缓存,则在索引器中加载整个页面。使用SetMinResult,SetMaxResults来填充记录页面,并保留已存在的页面的undelyng字典。一些小黑客要记住:删除更改排序/过滤器时缓存的所有项目。我在这里写了一篇关于我的解决方案的帖子:

http://www.felicepollano.com/Trackback.aspx?guid=831f463b-f3cf-47e4-b210-b80f6c6d1b32 这不完美但工作;)。您可以在u nofficial NHibernate addins中找到更多示例(我认为)。