我有一个网站,允许用户创建新的零件记录。我试图找出验证特定字段的唯一性的最佳方法。我想确保如果 PartNumber 已经存在于不同的 Part 上,则不会有人尝试添加 PartNumber 1234 的 Part。
Web 应用程序使用带有流利 nHibernate 的 Asp.net MVC 将我的对象映射到数据库。我在我的视图模型上对 ValidateNonEmpty、ValidateRange 等使用 Castle 验证。我是否应该使用ValidateSelf方法来查询存储库以查看该部件号是否已经存在?在 ViewModel 上使用我的存储库感觉有些不对劲。
把这个逻辑放在控制器动作上对我来说会更好吗?这似乎不对,因为我希望我的 ViewModel 已经被验证(在 ModelBind 期间)。
或者也许不是以上任何一种。感谢您对此的任何帮助。
更新 好的,不确定这是否会有所帮助,但对于我的项目中的典型创建操作,我的保存操作如下所示:
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);
}