要从Entity Framework获取特定的验证错误消息,我必须将所有[DbContext] .SaveChanges()包装在Try / Catch中,例如:
public bool Delete(int id)
{
using (var db = new MainContext())
{
db.Entry(new Borrower { Id = id }).State = EntityState.Deleted;
try
{
db.SaveChanges();
}
catch (DbEntityValidationException ex)
{
ex.Data.Add("Validation_Errors_from_DbEntityValidationException", Common.LogMessageDbEntityValidationException(ex));
throw;
}
}
return true;
}
在Common.LogMessageDbEntityValidationException中,我这样做:
public static string LogMessageDbEntityValidationException(DbEntityValidationException ex)
{
StringBuilder error = new StringBuilder();
error.AppendLine("Validation Error details for DbEntityValidationException that has been throw: ");
foreach (var validationErrors in ex.EntityValidationErrors)
{
foreach (var validationError in validationErrors.ValidationErrors)
{
error.AppendLine(string.Format("Property: {0} , Error: {1}", validationError.PropertyName, validationError.ErrorMessage));
}
}
return error.ToString();
}
如果我不这样做并且只捕获冒泡的错误,则EntityValidationErrors不可用于记录,这导致此级别的详细信息丢失。
在我的大型项目中,我有数百条这样的陈述。现在是否存在陷阱或在一个中心位置订阅此错误,例如实现DbContext的类?
答案 0 :(得分:0)
您可以覆盖SaveChanges