Depurar primeiro no código do Entity Framework

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 Consolecomando update-databaseDOES 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 Seedmétodo da Configurationclasse, 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-databasedesta vez, podemos ver todas as exceções internas:

The field XXX must be a string or array type with a maximum length of '25'.