NHibernate IPreUpdateEventListener, IPreInsertEventListener не сохраняется в БД
Я пытаюсь внедрить простой аудит на своих объектах. Проверяемые субъекты реализуютITimestampable
интерфейс, который определяетDateAdded
а такжеDateModified
свойства.
Я создал и зарегистрировал прослушиватель событий для заполнения этих значений. Вот полный код.
internal class TimeStampEventListener : IPreUpdateEventListener, IPreInsertEventListener
{
public bool OnPreUpdate(PreUpdateEvent e)
{
if (e.Entity is ITimestampable)
{
(e.Entity as ITimestampable).DateModified = DateTime.Now;
}
return false;
}
public bool OnPreInsert(PreInsertEvent e)
{
if (e.Entity is ITimestampable)
{
(e.Entity as ITimestampable).DateAdded = DateTime.Now;
}
return false;
}
public void Register(Configuration configuration)
{
configuration.SetListener(ListenerType.PreInsert, this);
configuration.SetListener(ListenerType.PreUpdate, this);
}
}
Теперь, когда я делаю сеанс сброса, слушатель вызывается, свойства аудита установлены правильно, но большую часть времени они не сохраняются в БД. Под «большей частью времени» я подразумеваю, что очень редко значения действительно сохраняются. Я не уверен, но это похоже на первую вставку / обновление после запуска приложения, что еще более странно.
Конечно, сначала я изменяю сущность, она сохраняется, но свойство аудита - нет.
Когда я смотрю на сгенерированный SQL в профилировщике, я вижу, что NULL отправляется в запросе вместо текущего времени, поэтому я предполагаю, что это не проблема с БД. Btw. Я использую MySQL иDateAdded
а такжеDateModified
столбецDATE
тип.
На сайте NHibernate эти свойства отображаются только как<property>
, Может быть, я пропускаю какое-то "специальное" отображение для таких случаев ...?
Я полностью застрял на этом. Любая помощь приветствуется.