Перехватчик NHibernate / крючок для коллекций Lazy-Loaded / Каскад - PullRequest
3 голосов
/ 03 апреля 2012

В последнее время у меня было достаточно для создания стандартного кода ViewModel, поэтому я закончил тем, что добавил функциональность NotifyPropertyChanged в решение на основе DynamicProxy.

Чтобы все механизмы Changenotification WPF работали для моей реализациивсе, что мне теперь нужно сделать, это обменяться своими коллекциями с ObservableCollections, что, к сожалению, вызывает проблему с производительностью (уведомление об изменении для каждой записи добавлено / удалено, поэтому не подходит для массового использования, поскольку пользовательский интерфейс слишком занят, пытаясь не отставать от спискаизменений).

Таким образом, в моих моделях коллекции других моделей (то есть отношений HasMany) хранятся не в списке, а в производном от ObservableCollection, который имеет два метода SuspendCollectionChangeNotification и * 1006.* (Немного похоже на реализацию, показанную здесь ).

Инфраструктура - все там, теперь я ищу ловушку Interceptor, которая позволяет мне вызывать Suspend() до того, как NHibernate Loads Childданные и Resume() после того, как это сделано.

Я немного боюсь, что в конечном итоге я добавлю это к прокси, о котором я говорил выше, у которого есть хорошее представление о запрашиваемых свойствах, но было бы просто замечательно хранить это в перехватчике NHibernate....

1 Ответ

0 голосов
/ 20 декабря 2012

NHibernate имеет IInitializeCollectionEventListener, что дает вам InitializeCollectionEvent при загрузке коллекции.

Вы можете подключиться так:

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

К сожалению, это говорит только о том, что коллекцияидет загрузка.Я не думаю, что можно определить, когда он начинается и когда он закончился.

...