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# - OrderBy 使用 Dynamic Linq with Relation

c# - Azure 媒体服务声音

c# - ASP.NET 从服务器获取文件列表

asp.net - 将 Javascript 确认对话框添加到 LinkBut​​ton/Form 会生成对象预期错误

asp.net - 什么是最好的 - 数据集或数据阅读器?

c# - 奇怪的 .Where() 行为。有人有解释吗?

c# - 使用索引器访问结构?

c# - 如何使用 Azure 语音转文本和 C# 生成时间戳?

c# - Entity Framework 更新具有一对多关系的两个表

.net - EF Core-无法加载程序集 'DataAccess'。确保它被启动项目 'DataAccess' 引用