Eu tenho a situação em que estou inicializando meu modelo no DatabaseInitializer () para EF 4.1 e recebo esse erro irritante. "Validation failed for one or more entities. See 'EntityValidationErrors' property for more details."
Então, eu vou para EntityValidationErrors e há um campo {System.Data.Entity.Validation.DbEntityValidationResult}
que não fornece nenhuma informação sobre qual campo ele não pôde inicializar. . Existe uma maneira de obter mais informações sobre esse erro?
Para esclarecer as coisas:
Eu sei como corrigir o problema do comprimento da string. O que estou perguntando é como obtenho o nome exato do campo que está quebrando o modelo.
ex
por$exception
e obter o mesmo resultado.ex
por w / e seucatch (Exception THIS)
éSystem.Linq.Enumerable.ToList(System.Linq.Enumerable.ToList(((System.Data.Entity.Validation.DbEntityValidationException)$exception).EntityValidationErrors)[0].ValidationErrors)[0].ErrorMessage
Você poderia tentar isso em um bloco try / catch?
fonte
A melhor solução, na minha opinião, é lidar com esse tipo de erro de maneira centralizada.
basta adicionar este método à
DbContext
classe principal :Isso substituirá o
SaveChanges()
método do seu contexto e você obterá uma lista separada por vírgula contendo todos os erros de validação da entidade.Espero que isso seja útil.
fonte
Bem, eu tive o mesmo problema. Meu modelo funcionou bem no EF CTP5, mas não conseguiu compilar no 4.1 com o mesmo erro "" Falha na validação de uma ou mais entidades "quando tentei inicializá-lo. Descobri que tinha propriedade:
Então, no método seed no inicializador substituído, eu tive um longo comentário (cerca de 600 letras).
Penso que o ponto é: no EF 4.1, é necessário definir anotações de dados explicitamente em alguns casos. Para mim, definindo:
ajudou. É estranho, já que o CTP5 não teve problemas com isso.
fonte
Achei útil criar um wrapper SaveChanges que tornasse o EntityValidationErrors mais legível:
e depois alterei 'entity.SaveChanges ()' para 'SaveChanges (entity)' em todo o meu projeto
fonte
Eu sei que é uma pergunta antiga, mas aqui está a minha resposta:
e se você usar o código primeiro, também poderá globalizar suas mensagens de erro usando vários arquivos de recursos
Por exemplo, eu tenho esses dois arquivos de recursos separados, um para erro e outro para o nome da propriedade e os uso da seguinte maneira:
Como você pode ver, traduzi completamente minhas mensagens de erro, incluindo os nomes das propriedades, para poder usá-las posteriormente no usuário, por exemplo:
fonte