У меня есть пользовательский слушатель событий, добавляемый (свободно) в мою конфигурацию, используя:
.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."