【问题标题】:Can I derive from IBindingList to facilitate lazy loading in NHibernate?我可以从 IBindingList 派生以促进 NHibernate 中的延迟加载吗?
【发布时间】:2011-03-29 03:50:44
【问题描述】:

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

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

但是,许多人认为这是不好的做法。

所以,我想知道是否可以以某种方式连接到 IBindingList 以拦截源自网格的数据获取,并即时创建和丢弃会话。

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

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

【问题讨论】:

  • 也许是在 winforms 中进行会话管理的一个很好的起点stackoverflow.com/questions/874981/…
  • @Vadim - 谢谢。我知道这一切,但由于某种原因发现它特别不透明。简单的问题 - 你知道 CBPBT 是否会做数据绑定和延迟加载?

标签: c# nhibernate data-binding


【解决方案1】:

在我看来,您提出的方法是最好的方法。我过去使用过它,我建议确定一个“页面”大小,如果尚未缓存,则将整个页面加载到索引器中。使用 SetMinResult、SetMaxResults 来获取记录页面,并保留一个已经存在的页面字典。要记住的一些小技巧:更改排序/过滤器时删除所有缓存的项目。我在这里写了一篇关于我的解决方案的帖子:

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

【讨论】:

  • 我查看了您的博客。看起来很有趣,但源文件和 zip 文件的链接已损坏。有没有其他方法可以得到它们?
  • 你在非官方的 nhibernate 插件中查看了吗?
  • 是的,我去过那个网站几次,但永远不知道如何获取源代码。秘诀是什么?
  • 另外,我也多次查看每个业务事务的对话内容 - 它是否允许通过数据绑定进行延迟加载?
猜你喜欢
  • 2012-04-29
  • 2018-04-02
  • 1970-01-01
  • 1970-01-01
  • 2012-04-05
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
相关资源
最近更新 更多