我有一个Asp.net MVC
项目正在使用Elmah
来记录例外情况。
该项目正在使用Entity Framework
,它可以抛出DbEntityValidationException
异常,其中指定哪些属性无法保存到数据库中。
我正在尝试捕获该异常(由Elmah未详细记录),并将信息附加到当前异常。
问题在于,如果我修改当前的异常,Elmah
不会捕获更改。相反,我必须使用DbEntityValidationException
的详细信息引发另一个异常,但这将创建两个连续的错误日志。
在elmah记录之前,可以在异常中添加一些额外的文本吗?
public class ErrorHandleAttribute : HandleErrorAttribute
{
public override void OnException(ExceptionContext filterContext)
{
if (filterContext.ExceptionHandled == true)
return;
Exception exception = filterContext.Exception;
Exception dbEntityException = exception;
while (dbEntityException != null && dbEntityException is System.Data.Entity.Validation.DbEntityValidationException == false)
{
dbEntityException = dbEntityException.InnerException;
}
if (dbEntityException != null && dbEntityException is System.Data.Entity.Validation.DbEntityValidationException)
{
DbEntityValidationException dbEntityValidationException = dbEntityException as DbEntityValidationException;
StringBuilder sb = new StringBuilder();
sb.AppendLine("Db Entity Validation Exception");
foreach (var item in dbEntityValidationException.EntityValidationErrors)
{
sb.AppendFormat("Entity: {0} {1}", item.Entry.Entity.ToString(), Environment.NewLine);
foreach (var error in item.ValidationErrors)
{
sb.AppendFormat("{0}: {1} {2}", error.PropertyName, error.ErrorMessage, Environment.NewLine);
}
}
exception = new Exception(sb.ToString(), exception);
ErrorSignal.FromCurrentContext().Raise(exception);
}
}
}