2013-05-17 7 views
8

otrzymuję ten błąd:Walidacja nie powiodła się dla co najmniej jednego elementu. Aby uzyskać więcej informacji, zobacz właściwość EntityValidationErrors. Kod Najpierw

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

gdy próbuję zaktualizować bazę danych za pomocą polecenia w konsoli Menedżer pakietów Update-Database.

Jak mogę napisać linie do okna wyjściowego w visual studio?

Próbowałem:

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

Ale to nie działa. Wszelkie inne sugestie dotyczące debugowania tego?

Odpowiedz

20

Nie wiem, dlaczego pisanie do okna wyjściowego VS nie działa i jak to działa. Ale w ostateczności wystarczy napisać błędów do pliku tekstowego, który powinien działać niezależnie od typu aplikacji masz:

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

Cześć, wow, dlaczego o tym nie pomyślałem !? Dzięki! – Yustme

+2

@Slauma: Dziękuję .. Dobra sztuczka .. Nigdy nie myślałem o tym .. To jest różnica między dobrymi programistami i bardzo dobrymi! ;) – user2394196

4

Możesz przekazać go stosu wyjątku jak poniżej.

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

Dzięki, spróbuję też w następnym projekcie! +1 – Yustme

Powiązane problemy