Перехватчик NHibernate / перехватчик для ленивых коллекций / Cascade

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

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

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

Инфраструктура есть, теперь я ищу перехватчик, который позволяет мне вызывать Suspend() до того, как NHibernate загружает дочерние данные, и Resume() после того, как это будет сделано.

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


person Sebastian Edelmeier    schedule 03.04.2012    source источник


Ответы (1)


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

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

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

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

person mattk    schedule 20.12.2012
comment
Извините, я еще не смог это проверить (праздничное безумие). Надеюсь, механизм вознаграждения SO позволит мне сделать это, когда я вернусь в офис. - person Sebastian Edelmeier; 24.12.2012