NHibernate OnFlushEntityEventListener - PullRequest
       32

NHibernate OnFlushEntityEventListener

1 голос
/ 02 мая 2011

Сначала некоторая справочная информация.Некоторое время назад я реализовал функции аудита с использованием слушателей NHibernate.Я использовал прослушиватель SaveOrUpdate, однако он срабатывал слишком часто, тогда как я хочу, чтобы запись аудита генерировалась только тогда, когда оператор SQL вставки / обновления фактически выполняется.Итак, я решил изменить это на слушатель FlushEntityEvent, чтобы гарантировать, что аудит происходил только при записи в базу данных.

Поскольку NHibernate будет часто обновлять внешние ключи и т. Д. (Иногда без необходимости?), У меня есть некоторый пользовательский грязный проверочный код, которыйсравнивает исходное (загруженное) состояние с новым (измененным) состоянием и генерирует контрольную запись, только если свойство, отличное от номера версии, было обновлено.Это прекрасно работает для обновлений, но я обнаружил, что для вставок состояние «pre» уже заполнено данными, что означает, что грязная проверка никогда не вернет true.Состояние 'pre' - из @ event.EntityEntry.LoadedState, а состояние 'post' - из persister.GetPropertyValues ​​(entity, EntityMode.Poco).

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

Есть идеи?

Спасибо

...