(NHibernate) PerformSaveOrUpdate событие не сохраняется правильно - PullRequest
1 голос
/ 16 июля 2010

У меня есть пользовательский слушатель событий, добавляемый (свободно) в мою конфигурацию, используя:

.ExposeConfiguration(c => c.SetListener(ListenerType.SaveUpdate, listener))

Мой слушатель просто захватывает перед сохранением или обновлением и обрабатывает поля аудита (CreatedBy, Modified By и т. Д.)

protected override object PerformSaveOrUpdate(SaveOrUpdateEvent sender)
{
      var entity = sender.Entity as IEditableEntity;

      if (entity != null)
      {
         if (entity.IsNew())
            ProcessEntityBeforeInsert(entity);
         else
            ProcessEntityBeforeUpdate(entity);
      }

      return base.PerformSaveOrUpdate(sender);
}

«entity.IsNew ()» - это метод, который проверяет, является ли Id объекта «> 0», и оценивает ли он правильно. Однако base.PerformSaveOrUpdate пытается выполнить вставку, когда она должна быть обновлением, и передает значение NULL в качестве идентификатора (он отображается как GeneratedBy.Identity ()), и я получаю следующее исключение:

"Cannot insert the value NULL into column 'Id', table '...'; column does not allow nulls. INSERT fails.\r\nThe statement has been terminated."

1 Ответ

1 голос
/ 16 июля 2010

Для этой цели следует использовать методы PreInsert и PreUpdate.

Вот полный пример: http://ayende.com/Blog/archive/2009/04/29/nhibernate-ipreupdateeventlistener-amp-ipreinserteventlistener.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...