我刚刚实现了 Elmah 来登录我的 MVC3 应用程序,当然一切都很好,除了当我使用信号记录自定义异常时,Elmah 似乎“看到”了我的自定义异常的 InnerException 属性,但不是自定义的异常本身。
当我使用下面的代码发出异常信号时,我没有在错误日志中看到“CtsDataException:错误”,正如我所料,我看到的是“DbEntityValidation:一个或多个实体的验证失败。”,内部异常和它的信息。如果我打开日志项,我会看到我的自定义异常已正确记录,因此看起来“异常描述符”是错误的,而不是实际的日志条目。
我究竟做错了什么?
PS,我的自定义例外是这样的:
public class CtsDataException: Exception
{
public CtsDataException(string message, Exception innerException): base(message, innerException)
{
ValidationResults = new List<CtsDbValidationResult>();
var vex = innerException as DbEntityValidationException;
if (vex != null)
{
ValidationResults = vex.EntityValidationErrors.Select(e => new CtsDbValidationResult(e)).ToList();
}
}
public IEnumerable<CtsDbValidationResult> ValidationResults { get; set; }
}
信令代码如下所示:
protected void HandleDbEntityValidationException(DbEntityValidationException vex, string message)
{
var ctsEx = new CtsDataException(message, vex);
ErrorSignal.FromCurrentContext().Raise(ctsEx);
}
HandleDbEntityValidationException
在我的基本控制器上。它在派生控制器中调用,如下所示:
catch (DbEntityValidationException vx)
{
var msg = string.Format("Error updating employee '{0}'", entity.RefNum);
HandleDbEntityValidationException(vx, msg);
}