我收到此错误:
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;
}
但那没用。关于如何调试这个的任何其他建议?
答案 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);
}