2013-05-17 4 views
8

ich diesen Fehler:Validierung für eine oder mehrere Entitäten fehlgeschlagen. Weitere Informationen finden Sie unter Eigenschaft 'EntityValidationErrors'. Code Erster

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

wenn ich versuche, die Datenbank mit dem Befehl Update-Database im Paket-Manager-Konsole zu aktualisieren.

Wie kann ich die Zeilen im Visual Studio in das Ausgabefenster schreiben?

Ich habe versucht:

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; 
} 

Aber das hat nicht funktioniert. Irgendwelche anderen Vorschläge, wie man das debuggt?

Antwort

20

Ich weiß nicht, warum das Schreiben in das VS-Ausgabefenster nicht funktioniert und wie es funktioniert. Aber als letztes schreiben nur die Fehler in eine Textdatei, die von der Art der Anwendung unabhängig arbeiten sollten Sie haben:

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())); 

} 
+0

Hallo, wow, warum habe ich nicht daran gedacht !? Vielen Dank! – Yustme

+2

@Slauma: Danke .. Netter Trick .. Niemals darüber nachgedacht .. Hier kommt der Unterschied zwischen guten Entwicklern und sehr guten! ;) – user2394196

4

Sie können es die Ausnahme-Stack wie unten verzichten.

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); 
} 
+0

Danke, ich werde das auch in meinem nächsten Projekt ausprobieren! +1 – Yustme

Verwandte Themen