NHibernate PreUpdateEvent отправляет вето обратно в пользовательский интерфейс - PullRequest
1 голос
/ 03 марта 2011

Фон

Попытка переключиться с использования перехватчика на события.

У меня есть ValidationInterceptor, который переопределяет OnFlushDirty и OnSave и выполняет мою собственную логику проверки. Если у объекта есть ошибки проверки, выдается исключение, которое возвращается к пользовательскому интерфейсу.

Мой новый ValidationHandler, который реализует IPreUpdate и IPreInsert EventListeners, выполняет ту же логику проверки, но возвращает "true", чтобы указать NHibernate наложить вето на операцию. Что работает, но пользовательский интерфейс не знает, что вето произошло.

Вопрос

Как пользовательский интерфейс узнает, что вето произошло во время событий PreInsert или PreUpdate?

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

Вся информация, которую имеет пользовательский интерфейс, указывает на успешное сохранение:

  • Идентификатор объекта был установлен.
  • проверка сеанса IsDirty () имеет значение false.
  • нет исключений при попытке сохранения.

1 Ответ

0 голосов
/ 10 марта 2011

О, я тупой.

Позвольте мне представить мой код для доказательства:

public bool OnPreInsert(PreInsertEvent @event)
{
  try
  {
    var entity = @event.Entity as Api.IValidatable;
    if (entity == false)
      return false;

    if (entity.HasErrors())
      throw new ObjectIsInvalidException(entity.ValidationErrorMessage());

    return false;
  }
  catch (Exception ex)
  {
    log.Error("Unable to perform PreInsert validation on entity", ex);
  }
}

Да, исключение было проглочено до того, как оно вышло из метода.

Изменено, чтобы сбросить исключение, и все работает как надо.

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