Я предпочитаю работать с конфигурацией Fluent API вместо DataAnnotation, потому что хочу отделить модель от доступа к данным.
Я пробовал использовать MVC, Fluent API не работает с проверкой на стороне клиента. Короче говоря, есть ли простой способ заставить Fluent API работать с проверкой на стороне клиента, как это может сделать DataAnnotation?
Сегодня я некоторое время боролся с этим, и это не строго клиентская проверка, так как она требует двусторонней проверки, но она позволяет вам воспользоваться сводкой проверки и помощниками сообщений в стандартном шаблоне. В вашем методе действия контроллера вы просто упаковываете свой вызов SaveChanges()
в try-catch и добавляете полученные ошибки в ModelState
следующим образом:
try {
//This does not pick up fluent validation failures
if (ModelState.IsValid) {
db.Entity.Add(entity);
db.SaveChanges();
//Users want to create loads of my entities without seeing the index...
return RedirectToAction("Create");
}
} catch (DbEntityValidationException e) {
//Log errors
foreach (var result in e.EntityValidationErrors) {
foreach(var error in result.ValidationErrors){
ModelState.AddModelError(error.PropertyName, error.ErrorMessage);
}
}
}
//return to view with current model + validation errors
return View(entity)
Это, конечно, потребует немного больше работы, если Вы сохраняете несколько объектов здесь.
Конечно, использование объектов модели представления, как полагает Ладислав, было бы правильным подходом, однако я использовал его для поддержки тестового пользовательского интерфейса, запрошенного для тестирования интеграции последующих систем с опережением графика ...