簡體   English   中英

無法調試時如何獲取錯誤信息

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM