No início, podemos pensar que não é possível depurar a configuração do nosso modelo e método de propagação no código primeiro, uma vez que esses códigos não podem ser executados clicando no botão de depuração no Visual Studio.
Embora o Package Manager Console
comando update-database
DOES forneça algumas informações de exceção, é difícil cavar em exceções internas. Por exemplo,
Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.
Veja como podemos conseguir mais do que precisamos.
Dentro do Seed
método da Configuration
classe, em vez de chamar context.SaveChanges()
, chamamos um método SaveChanges(context)
que está context.SaveChanges()
dentro de um try
:
private static void SaveChanges(DbContext context)
{
try
{
context.SaveChanges();
}
catch (DbEntityValidationException ex)
{
var sb = new StringBuilder();
foreach (var failure in ex.EntityValidationErrors)
{
sb.AppendFormat("{0} failed validationn", failure.Entry.Entity.GetType());
foreach (var error in failure.ValidationErrors)
{
sb.AppendFormat("- {0} : {1}", error.PropertyName, error.ErrorMessage);
sb.AppendLine();
}
}
throw new DbEntityValidationException(
"Entity Validation Failed - errors follow:n" +
sb.ToString(), ex
);
}
}
Execute update-database
desta vez, podemos ver todas as exceções internas:
The field XXX must be a string or array type with a maximum length of '25'.