asp.net-mvc - 使用 MVC 和流利的 Nhibernate,如何在将 ViewModel 上的唯一字段绑定(bind)到我的域对象并保存它们之前验证它们?

标签 asp.net-mvc model-view-controller fluent-nhibernate repository-pattern castle

我有一个网站,允许用户创建新的零件记录。我试图找出验证特定字段的唯一性的最佳方法。我想确保如果 PartNumber 已经存在于不同的 Part 上,则不会有人尝试添加 PartNumber 1234 的 Part。

Web 应用程序使用带有流利 nHibernate 的 Asp.net MVC 将我的对象映射到数据库。我在我的 View 模型上对 ValidateNonEmpty、ValidateRange 等使用 CaSTLe 验证。我应该使用 ValidateSelf查询存储库以查看该部件号是否已存在的方法?在 ViewModel 上使用我的存储库感觉有些不对劲。

把这个逻辑放在 Controller Action 上对我来说会更好吗?这似乎不对,因为我希望我的 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);
}

最佳答案

我被问过很多次这个问题。我的 friend 们担心他们是否可以从验证器代码中执行数据访问。答案很简单。如果你需要这样做,你应该这样做。通常我们需要在每个抽象级别做这样的检查。在所有检查之后,您应该准备好捕获由违反唯一约束引起的异常。

关于asp.net-mvc - 使用 MVC 和流利的 Nhibernate,如何在将 ViewModel 上的唯一字段绑定(bind)到我的域对象并保存它们之前验证它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1440440/

相关文章:

c# - ASP.NET MVC 中的 DynamoDB session 状态

asp.net-mvc - ASP.NET 身份密码验证

javascript - 将客户端特定的日期格式返回到服务器 MVC4

c# - 流利的 Nhibernate : could not resolve property

asp.net-mvc - 我可以在运行 MVC3 应用程序的情况下对 .NET 4 进行 bin 部署和 MVC4 吗?

html - 如何根据模型项目 ID 设置 Html id

c++ - 如何在QTableView中显示QAbstractItemModel的子行

php - 如何为 php mvc 构建一个好的路由器

c# - 抑制使用 NHibernate 完成的所有 DML 事务的数据库日志

nhibernate - 有没有关于 NHibernate 与 Fluent NHibernate 启动性能的数据?