没有DRY的DbEntityValidationException

时间:2017-11-21 18:06:17

标签: c# asp.net-mvc entity-framework

我在ASP.NET MVC项目中使用“来自数据库的EF Designer”来获得CRUD功能。

我有很多处理CRUD功能的操作,我希望在调用saveChanges()方法时进行验证,如果抛出任何错误,请尝试捕获。

switch (sh)
{
   case 1:
      DoThis();
      DoThat();
      break;
   case 2:
   {
      DoThis();
      DoThat();
   }break; 
   case 3:
   case 4:
   {
      DoThis();
      DoThat();
   }
   case 5:
      goto case 1; 
   default:
   {
      DoThis();
      DoThat();
   }  
} 

目前上面的代码在几个动作方法中重复,我想知道是否有更简洁的方法来做这个而不重复相同的代码?这种类型的工作有设计模式吗?

1 个答案:

答案 0 :(得分:1)

在您的特定DbContext中,只需覆盖SaveChanges()并执行以下操作:

public class MyDbContext : DbContext 
{
...
public override int SaveChanges()
    try
{
      base.SaveChanges();
}
catch (DbEntityValidationException e)
{
 foreach (var eve in e.EntityValidationErrors)
 {
    Debug.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:", eve.Entry.Entity.GetType().Name, eve.Entry.State);

    foreach (var ve in eve.ValidationErrors)
    {
          Debug.WriteLine("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage);
   }
}

}