一个或多个实体的验证失败。有关详细信息,请参阅“EntityValidationErrors”属性。代码优先

时间:2013-05-17 21:40:36

标签: ef-code-first entity-framework-5 nuget-package

我收到此错误:

Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.

当我尝试使用程序包管理器控制台中的Update-Database命令更新数据库时。

如何在visual studio中将这些行写入输出窗口?

我试过了:

try
{
    context.SaveChanges();
}
catch (System.Data.Entity.Validation.DbEntityValidationException e)
{
    foreach (var eve in e.EntityValidationErrors)
    {
        System.Diagnostics.Debug.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)
        {
            System.Diagnostics.Debug.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
                ve.PropertyName, ve.ErrorMessage);
        }
    }
    throw;
}

但那没用。关于如何调试这个的任何其他建议?

2 个答案:

答案 0 :(得分:21)

我不知道为什么写入VS输出窗口不起作用以及如何使其工作。但作为最后的手段,只需将错误写入文本文件,该文件应独立于您拥有的应用程序类型而工作:

try
{
    context.SaveChanges();
}
catch (System.Data.Entity.Validation.DbEntityValidationException e)
{
    var outputLines = new List<string>();
    foreach (var eve in e.EntityValidationErrors)
    {
        outputLines.Add(string.Format(
            "{0}: Entity of type \"{1}\" in state \"{2}\" has the following validation errors:",
            DateTime.Now, eve.Entry.Entity.GetType().Name, eve.Entry.State));
        foreach (var ve in eve.ValidationErrors)
        {
            outputLines.Add(string.Format(
                "- Property: \"{0}\", Error: \"{1}\"",
                ve.PropertyName, ve.ErrorMessage));
        }
    }
    //Write to file
    System.IO.File.AppendAllLines(@"c:\temp\errors.txt", outputLines);
    throw;

    // Showing it on screen
    throw new Exception( string.Join(",", outputLines.ToArray()));

}

答案 1 :(得分:4)

您可以将其传递给异常堆栈,如下所示。

try
{
    _dbContext.SaveChanges();
}
catch (DbEntityValidationException dbValEx)
{
   var outputLines = new StringBuilder();
   foreach (var eve in dbValEx.EntityValidationErrors)
   {
     outputLines.AppendFormat("{0}: Entity of type \"{1}\" in state \"{2}\" has the following validation errors:"
       ,DateTime.Now, eve.Entry.Entity.GetType().Name, eve.Entry.State);

     foreach (var ve in eve.ValidationErrors)
     {
       outputLines.AppendFormat("- Property: \"{0}\", Error: \"{1}\""
        ,ve.PropertyName, ve.ErrorMessage);
     }
   }

 throw new DbEntityValidationException(string.Format("Validation errors\r\n{0}"
  ,outputLines.ToString()), dbValEx);
}