Переход с xVal на проверку nHibernate

У меня есть проект ASP.NET MVC с xVal и аннотациями данных, и мне нужно переключиться на проверку nHibernate. С аннотациями данных у меня был DataAnnotationsValidationRunner, и я делал что-то вроде этого:

  var errors = DataAnnotationsValidationRunner.GetErrors(this).ToList();
  if (errors.Any())
      throw new RulesException(errors);

Как это сделать с помощью nHibernate.Validator?

Обновление: я видел что-то вроде этого:

 var engine = new ValidatorEngine();
 var errors = engine.Validate(objstovalid)

но я не могу

if (errors.Any())
    throw new RulesException(errors);

потому что ошибки неправильного типа (xVal.ServerSide.ErrorInfo).


person Omu    schedule 04.11.2009    source источник


Ответы (1)


Насколько мне известно, xVal раньше предлагал средство запуска для NHibernate Validation, но он работал только с предыдущей версией. Насколько мне известно, для текущей версии NHV нет бегуна.

Чтобы уточнить, вы все еще хотите использовать xVal? Если нет, проигнорируйте приведенное выше и запустите проверку NHV следующим образом:

var validator = new ValidatorEngine();
InvalidValue[] values = validator.Validate(theEntityYouWantToValidate);
person UpTheCreek    schedule 04.11.2009
comment
да, я все еще хочу использовать xval, я не хочу использовать System.ComponentModel.DataAnnotations - person Omu; 04.11.2009
comment
Я думаю, мне вообще не нужен xval на стороне сервера, не могли бы вы рассказать мне, как выбросить исключение правила гибернации - person Omu; 04.11.2009
comment
где мне найти эти исключения спящего режима, какое пространство имен - person Omu; 04.11.2009
comment
Насколько мне известно, NHibernate ValidatorEngline не генерирует исключений. Он просто возвращает массив InvalidValues. Вы должны быть в состоянии найти типы ValidatorEngine и InvalidValue в пространствах имен NHibernate.Validator или NHibernate.Validator.Engine. - person UpTheCreek; 04.11.2009
comment
Итак, чтобы прояснить, вместо того, чтобы иметь дело с исключением, вы должны просто проверить размер возвращаемого массива недопустимых значений - если он больше z, пропустите его и добавьте ошибки в состояние вашей модели. - person UpTheCreek; 04.11.2009
comment
как насчет правил проверки бизнес-правил, которые не обнаруживаются валидатором. - person Omu; 04.11.2009
comment
Вы должны запустить валидатор, переместить любые ошибки в состояние модели, затем запустить проверку своих бизнес-правил (которые могут быть просто настраиваемыми методами или чем-то еще) и также добавить любые ошибки из этого состояния в состояние модели. - person UpTheCreek; 04.11.2009
comment
Мне удалось заставить nhiberante работать с xval, моя текущая проблема в том, что проверка на стороне клиента для datetime (будущее / прошлое) не происходит - person Omu; 04.11.2009
comment
Да, я потому, что бегун xVal для NHV не полностью поддерживает новую версию. Я полагаю, что это скоро будет обновлено (если проект будет продолжен). Кстати, просто интересуетесь вашими причинами перехода с DataAnnotations? - person UpTheCreek; 04.11.2009
comment
не могли бы вы сказать мне, как правильно добавить InvalidValue спящего режима в ModelState? - person Omu; 04.11.2009
comment
ну, я отключил javascript, и проверка на стороне сервера для datetime не работает с аннотациями данных - person Omu; 04.11.2009
comment
хорошо, поэтому я узнал, как добавить их в ModelState, теперь у меня другая проблема: когда я выключаю javascript, сообщения не отображаются рядом с каждым полем (только ), и они отображаются в сводке, потому что я добавляю ошибки в ModelState; и у меня есть что-то вроде этого ‹% = Html.ValidationMessage (ClientName,)%› рядом с каждым полем, я понимаю, что если бы я изменил * с сообщением, оно бы появилось, но я хотел бы, чтобы появилось сообщение от аннотации, как-то автоматически - person Omu; 04.11.2009
comment
Второй параметр в ValidationMessage Helper не нужен. Он должен отображать сообщение, содержащееся в вашей коллекции ошибок modelstate. Убедитесь, что вы (или библиотека) добавляете эту информацию. Например. modelState.AddModelError (... - person UpTheCreek; 04.11.2009
comment
теперь все в порядке, у меня было что-то вроде .UseValidationSummary (summaryid) в представлении, я удалил его, и он работает; так что теперь я использую проверку аннотаций данных, а не спящий режим, выглядит нормально - person Omu; 04.11.2009