ユーザーが新しいパーツレコードを作成できるようにするWebサイトがあります。特定のフィールドの一意性を検証するための最良の方法を見つけようとしています。その部品番号が別の部品にすでに存在する場合、誰かが部品番号1234の部品を追加しようとしないようにしたいと思います。
Webアプリケーションは、オブジェクトをデータベースにマッピングするために、流暢なnHibernateを備えたAsp.netMVCを使用しています。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);
}