c# - Entity Framework 中的验证无一异常(exception)

标签 c# asp.net entity-framework validation domain-driven-design

我正在使用 Entity Framework,我想验证我的模型。

示例服务:

var user = _userRepository.GetUser(...);
var order = user.MakeOrder();             //<- this is some business logic in Rich Domain Model
_userRepository.Update(user);
_orderRepository.Add(order);

数据库操作可能会抛出 DbEntityValidationException。我可以捕获它并做一些工作来向用户显示错误:

try
{
    _userRepository.Update(user);
    _orderRepository.Add(order);
}
catch(DbEntityValidationException ex)
{
   var error = ex.EntityValidationErrors();
   //Pass errors to Controller
}

但我知道,异常很慢。有没有什么方法可以毫无异常(exception)地做同样的事情(例如某种返回值)以获得更好的性能?

最佳答案

1) 您必须实现您的模型 IValidatableObject 接口(interface),然后在 Validate 方法中定义验证规则

Your Model

2-) 使用 ModelState.IsValid 属性。不需要 try catch block

Your Api

3-) 为页面元素添加验证消息 block

ClientSideValitaion

更多详情

http://weblogs.asp.net/scottgu/class-level-model-validation-with-ef-code-first-and-asp-net-mvc-3

额外的

您可以使用流畅的验证 https://fluentvalidation.codeplex.com/wikipage?title=mvc

基本示例 http://www.jerriepelser.com/blog/using-fluent-validation-with-asp-net-mvc-part-1-the-basics

关于c# - Entity Framework 中的验证无一异常(exception),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39456536/

相关文章:

c# - 我可以在不安装 R 的情况下使用 R.Net 吗?

c# - 如何在 C# 中向我的 GUI 添加计算?

c# - asp.net vnext 中的 wwwroot 是什么

javascript - 选择标题复选框时选择所有复选框

entity-framework - Update-Database(在包管理器控制台中使用)的反向是什么?

c# - Entity Framework LINQ 投影到自定义类型导致数据丢失

c# - 无法将正在执行的程序集加载到新的 AppDomain 中,FileNotFoundException

C# 和 utf8_decode

javascript - 是否可以在asp :checkbox?中调用2个单独的函数onClick事件

entity-framework - EF Fluent API 多对一关系,未获取导航属性