用于Lazy-Loaded集合/ Cascade的NHibernate拦截器/钩子

时间:2012-04-03 12:03:01

标签: nhibernate lazy-loading has-many interceptor

最近我已经有足够的创建ViewModel样板代码,所以我最终将NotifyPropertyChanged功能添加到基于DynamicProxy的解决方案。

为了让所有WPF的Changenotification机制适用于我的实现,我现在要做的就是将我的Collections与ObservableCollections交换,遗憾的是它会带来性能问题(添加/删除每条记录的更改通知,所以不适合用于批量使用,因为UI太忙于尝试跟上更改列表。)

因此,在我的模型中,其他模型的集合(HasMany关系,即)不在列表中,而是在具有两个方法SuspendCollectionChangeNotificationResumeCollectionChangeNotification的ObservableCollection派生中(A有点像here)所示的实现。

基础架构就在那里,现在我正在寻找一个Interceptor钩子,它让我能够在NHibernate加载子数据之前调用Suspend(),并在完成之后调用Resume()

我有点害怕我最终将这个添加到我上面提到的代理中,它很好地掌握了所请求的属性,但是将它保存在NHibernate Interceptor中会很可爱。

1 个答案:

答案 0 :(得分:0)

NHibernate有IInitializeCollectionEventListener,在加载集合时会给你InitializeCollectionEvent

你可以像这样挂钩:

var listener = new YourCollectionListenerImpl();
configuration.SetListener(ListenerType.LoadCollection, adapter);

不幸的是,这只会告诉您正在进行集合加载。我认为不可能确定它何时开始以及何时结束。