2

将 mvc 与存储库一起使用时验证模型的最佳方法是什么?我寻找例子,但我没有找到任何正是我需要的。

假设我有一个具有 5 个属性的模型……其中 3 个带有数据注释……并且我有一些验证,我需要在插入之前检查数据库。

我需要像“User.IsValidToInsert”这样的东西来检查它是否有效。但我也想使用“ModelState.IsValid”,因为我不想手动检查“IsValidToInsert”中带有数据注释的所有属性。

我怎样才能做到这一点?我应该在“IsValidToInsert”中设置访问数据库的验证吗?我应该将“用户”和“模型状态”之类的参数传递给存储库类吗?

4

1 回答 1

0

您应该使用特定于视图的视图模型。如果您有Create创建 的操作Product,请创建一个ProductCreate视图模型。您可以放置​​特定于创建产品的数据注释(或 Fluent Validation 等)。这将是您的视图/控制器的模型。如果您有一个编辑页面,则创建一个ProductEdit视图模型。

现在,如果您有其他逻辑(例如验证用户是否已经存在,那么您应该将其放在服务层中。您的控制器应该尽可能简单。您发布您的视图模型,将其转换为域模型并传递它必要时到服务层。

[HttpPost]
public ActionResult Create(ProductCreate model)
{
    // simple validations
    if( !ModelState.IsValid )
    {
        return View(model);
    }

    // Domain Model / Entity
    Product product = // create a product from your model here

    // service layer
    ProductService.Add(product);

    return RedirectToAction("Index");
}
于 2012-04-17T16:44:35.100 回答