[英]How to get error message when no way debugging
我在應用程序中使用EF並引發異常
System.Data.Entity.Validation.DbEntityValidationException:對一個或多個實體的驗證失敗。 有關更多詳細信息,請參見'EntityValidationErrors'屬性。 在System.Data.Entity.Internal.InternalContext.SaveChanges()在Capture.Controllers.HomeController.AddFirstVisit(Int32 companyId)
我可以看到需要了解有關該錯誤的信息-我需要查看EntityValidationErrors
但問題是我無法調試-該代碼需要在服務器上運行,因此在本地運行不會重現此錯誤。
我的問題是,沒有看到對象,如何將執行結果作為字符串取出?
目前,我使用catch(Exception e)
並將e.ToString()
傳遞到我的日志記錄引擎。
如何傳遞錯誤詳細信息? 我希望像
catch(Exception e)
{
e.innerException.EntityValidationErrors; // what should this be
}
這幾乎是答案EF代碼優先:我如何從nuget軟件包控制台中看到“ EntityValidationErrors”屬性? 但我沒有e.EntityValidationErrors
的選項
假設Log(string)
日志到您的日志引擎:
catch (DbEntityValidationException ex)
{
foreach (var evr in ex.EntityValidationErrors)
{
foreach (var error in evr.ValidationErrors)
{
Log(error.PropertyName + ": " + error.ErrorMessage);
}
}
}
我創建了一個用於處理modelstate錯誤的類。
public class Message
{
public string Title { get; set; }
public string Mensagem { get; set; }
public List<string> Itens { get; set; }
public string itensRetorno { get; set; }
public Message()
{
this.Itens = new List<string>();
}
public void Add(string item)
{
this.Itens.Add(item);
}
public string GetMessages()
{
var MsgItens = string.Empty;
foreach (var item in this.Itens)
{
MsgItens += "<li>" + item + "</li>";
}
this.itensRetorno = MsgItens;
return MsgItens;
}
public static class ModelStateUtils
{
public static Message GetModelStateErrors(ModelStateDictionary modelState)
{
Message msg = new Message();
List<string> errorKeys = new List<string>();
int index = 0;
foreach (var val in modelState.Values)
{
if (val.Errors.Count() > 0)
{
msg.Itens.Add(modelState.Keys.ElementAt(index));
}
index++;
}
msg.Title = "Erro";
msg.Mensagem = "Os seguintes campos são obrigatórios<br />" + msg.GetMessages();
return msg.Itens.Count() > 0 ? msg : null;
}
}
首先捕獲更具體的異常:
catch(DbEntityValidationException e)
{
// Do something with e.EntityValidationErrors;
}
catch(Exception e)
{
// Do whatever you were already doing with the generic exception
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.