第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一個或多個實體的驗證失敗。有關詳細信息,請參閱“EntityValidationError”屬性

一個或多個實體的驗證失敗。有關詳細信息,請參閱“EntityValidationError”屬性

飲歌長嘯 2019-06-20 16:01:55
一個或多個實體的驗證失敗。有關詳細信息,請參閱“EntityValidationError”屬性當用代碼優(yōu)先方法播種我的數(shù)據(jù)庫時,我遇到了這個錯誤。一個或多個實體的驗證失敗。有關詳細信息,請參閱“EntityValidationError”屬性。老實說,我不知道如何檢查驗證錯誤的內(nèi)容。VisualStudio向我展示了它是一個包含8個對象的數(shù)組,因此有8個驗證錯誤。這是與我以前的模型一起工作的,但是我做了一些修改,我在下面解釋如下:我有一個名為Status的枚舉,我將它更改為一個名為Status的類。我將類ApplicantsPositionHistory更改為同一個表的2個外鍵對不起,代碼太長了,但我得把它全部粘貼起來。異常將在以下代碼的最后一行中拋出。namespace Data.Model{       public class Position     {         [DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.Identity)]            public int PositionID { get; set; }         [Required(ErrorMessage = "Position name is required.")]         [StringLength(20, MinimumLength = 3, ErrorMessage = "Name should not be longer than 20 characters.")]         [Display(Name = "Position name")]                       public string name { get; set; }         [Required(ErrorMessage = "Number of years is required")]          [Display(Name = "Number of years")]                 public int yearsExperienceRequired { get; set; }         public virtual ICollection<ApplicantPosition> applicantPosition { get; set; }     }     public class Applicant     {         [DatabaseGenerated(System.ComponentModel.DataAnnotations.DatabaseGeneratedOption.Identity)]               public int ApplicantID { get; set; }         [Required(ErrorMessage = "Name is required")]          [StringLength(20, MinimumLength = 3, ErrorMessage="Name should not be longer than 20 characters.")]         [Display(Name = "First and LastName")]         public string name { get; set; }         [Required(ErrorMessage = "Telephone number is required")]          [StringLength(10, MinimumLength = 3, ErrorMessage = "Telephone should not be longer than 20 characters.")]         [Display(Name = "Telephone Number")]         public string telephone { get; set; }         [Required(ErrorMessage = "Skype username is required")]          [StringLength(10, MinimumLength = 3, ErrorMessage = "Skype user should not be longer than 20 characters.")]         [Display(Name = "Skype Username")]     }
查看完整描述

3 回答

?
慕田峪9158850

TA貢獻1794條經(jīng)驗 獲得超8個贊

老實說,我不知道如何檢查驗證錯誤的內(nèi)容。VisualStudio向我展示了它是一個包含8個對象的數(shù)組,因此有8個驗證錯誤。

實際上,如果在調(diào)試期間鉆入Visualstudio中的數(shù)組,您應該會看到錯誤。但是,您也可以捕獲異常,然后將錯誤寫入某個日志存儲區(qū)或控制臺:

try{
    // Your code...
    // Could also be before try if you know the exception occurs in SaveChanges

    context.SaveChanges();}catch (DbEntityValidationException e){
    foreach (var eve in e.EntityValidationErrors)
    {
        Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
            eve.Entry.Entity.GetType().Name, eve.Entry.State);
        foreach (var ve in eve.ValidationErrors)
        {
            Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                ve.PropertyName, ve.ErrorMessage);
        }
    }
    throw;}

EntityValidationErrors是一個集合,它表示無法成功驗證的實體和內(nèi)部集合。ValidationErrors每個實體都是屬性級別上的錯誤列表。

這些驗證消息通常有助于找到問題的根源。

編輯

幾點小小的改進:

這個價值在內(nèi)部循環(huán)中可以包括以下違規(guī)屬性:

        foreach (var ve in eve.ValidationErrors)
        {
            Console.WriteLine("- Property: \"{0}\", Value: \"{1}\", Error: \"{2}\"",
                ve.PropertyName,
                eve.Entry.CurrentValues.GetValue<object>(ve.PropertyName),
                ve.ErrorMessage);
        }

同時調(diào)試Debug.Write可能比Console.WriteLine因為它適用于所有類型的應用程序,而不僅僅是控制臺應用程序(感謝@Bart在下面的注釋中給出的說明)。

用于正在生產(chǎn)和使用的web應用程序埃爾馬對于異常日志記錄,對我來說創(chuàng)建自定義異常和覆蓋非常有用。SaveChanges才能拋出這個新的異常。

自定義異常類型如下所示:

public class FormattedDbEntityValidationException : Exception{
    public FormattedDbEntityValidationException(DbEntityValidationException innerException) :
        base(null, innerException)
    {
    }

    public override string Message
    {
        get        {
            var innerException = InnerException as DbEntityValidationException;
            if (innerException != null)
            {
                StringBuilder sb = new StringBuilder();

                sb.AppendLine();
                sb.AppendLine();
                foreach (var eve in innerException.EntityValidationErrors)
                {
                    sb.AppendLine(string.Format("- Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                        eve.Entry.Entity.GetType().FullName, eve.Entry.State));
                    foreach (var ve in eve.ValidationErrors)
                    {
                        sb.AppendLine(string.Format("-- Property: \"{0}\", Value: \"{1}\", Error: \"{2}\"",
                            ve.PropertyName,
                            eve.Entry.CurrentValues.GetValue<object>(ve.PropertyName),
                            ve.ErrorMessage));
                    }
                }
                sb.AppendLine();

                return sb.ToString();
            }

            return base.Message;
        }
    }}

SaveChanges可以用下列方式覆蓋:

public class MyContext : DbContext{
    // ...

    public override int SaveChanges()
    {
        try
        {
            return base.SaveChanges();
        }
        catch (DbEntityValidationException e)
        {
            var newException = new FormattedDbEntityValidationException(e);
            throw newException;
        }
    }}

幾點意見:

  • Elmah在Web界面或發(fā)送的電子郵件中顯示的黃色錯誤屏幕(如果您已經(jīng)配置了的話)現(xiàn)在將驗證細節(jié)直接顯示在消息的頂部。

  • 覆蓋Message屬性在自定義異常中,而不是覆蓋。ToString()具有標準的ASP.NET“死亡黃屏幕(YSOD)”也顯示此消息的好處。與Elmah相比,YSOD顯然不使用ToString(),但兩者都顯示Message財產(chǎn)。

  • 包裝原件DbEntityValidationException作為內(nèi)部異常,可以確保原始堆棧跟蹤仍然可用,并顯示在Elmah和YSOD中。

  • 通過在行上設置斷點throw newException;您可以簡單地檢查newException.Message屬性作為文本,而不是鉆入驗證集合,這有點尷尬,而且似乎對每個人都不容易工作(請參閱下面的注釋)。


查看完整回答
反對 回復 2019-06-20
  • 3 回答
  • 0 關注
  • 1661 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號