2010-09-14 50 views
2

我有一些问题绑定到从NHibernate使用延迟加载检索的对象。我已经阅读了一些关于这个问题的文章,并且对我需要做些什么来解决问题感到困惑。NHibernate和INotifyPropertyChanged

据我所知,这个问题与NHibernate的处理对于尚未加载的东西代理的方式做。有人使用延迟加载和INotifyPropertyChanged实现NHibernate吗?

眼下INotifyPropertyChanged的作品,如果我禁用延迟加载,但否则如果他们必然要被延迟加载的东西没有UI元素得到更新。我已经有点头脑满意了,而且代理实现对我来说更加陌生,所以我不完全是我在这里需要的东西。 :)我希望有一些合理简单的解决方案。

+0

http://ayende.com/Blog/archive/2009/08/07/nhibernate-amp-inotifypropertychanged.aspx – 2010-09-14 02:25:09

+0

我尝试这样做,但我不确定它适用于NHibernate查询生成的代理。至少它不适合我。 – Justin 2010-09-14 08:08:49

+0

(具体地说)它是如何工作的? – 2010-09-14 20:54:31

回答

0

如果你确定你已经使用NH Interceptor代理你的域名,那么一切都应该正常工作。除非你在会话管理上犯了错误,因为截取不在会话范围之外工作。你是否微调管理你的会话每个方法调用你的仓库?

实际上,非网页基本应用程序的最佳实践是管理每个表单的会话,也许您已阅读this,该文章解释了如何管理每个表单的会话,但由于会话分发给演示者,因此解决方案有点脏。

我见过的最干净的会话管理是uNhAddins与城堡适配器,你只关心configuration其余的你编程自己的存储库和服务。以下是技术参考:part 1,part 2,part 3, part 4

我最喜欢的例子是this one,但在WPF的情况下,你应该看看this one

希望有所帮助。

+0

一些链接被破坏,因为他们现在使用了mercurial – ktutnik 2010-10-05 07:15:54

0

的问题是,绑定期待的属性更改事件是代理对象的发件人,但它实际上是代理的目标对象。这会导致绑定忽略该事件。

我有同样的问题,我通过实现拦截订阅PropertyChanged事件,并将其订阅自己的事件的新的NHibernate代理固定它。然后当目标引发事件时,它将它传递给代理订阅者,但用发送者代理发送者。

我写了一篇博客文章在这里:http://calebvear.blogspot.com/2011/04/wpf-bindings-not-updating-when.html