У меня есть веб-сайт, на котором я разрешаю пользователям создавать новые записи деталей. Я пытаюсь найти лучший способ проверить конкретные поля для уникальности. Я хочу убедиться, что кто-то не пытается добавить Part с PartNumber 1234, если этот PartNumber уже существует в другой части.
Веб-приложение использует Asp.net MVC с плавным nHibernate для сопоставления моих объектов с базой данных. Я использую проверку валидатов на моделях просмотра для таких вещей, как ValidateNonEmpty, ValidateRange и т.д. Должен ли я использовать метод ValidateSelf для запроса репозитория на посмотрите, существует ли этот номер детали? Что-то не похоже на использование моего репозитория в ViewModel.
Было бы лучше, если бы я поставил эту логику на действие контроллера? Это не кажется правильным, потому что я ожидаю, что мой ViewModel уже будет проверен в точке (во время ModelBind).
Или, может быть, ни один из вышеперечисленных. Спасибо за любую помощь на этом.
UPDATE Хорошо, не уверен, что это поможет, но вот что мое действие Save выглядит как типичное действие Create в моем проекте:
public ActionResult Create(PartViewModel viewModel)
{
//I think I'd like to know if its Valid by this point, not on _repository.Save
if(ModelState.IsValid)
{
try
{
var part = _partCreateViewModelMap.MapToEntity(viewModel);
_repository.Save(part);
return Redirect("~/Part/Details/" + part.Id);
}
catch (Exception e)
{
// skip on down...
}
}
// return view to edit
return View(viewModel);
}