Estou perplexo por isso:
Eu defini minhas classes para uma primeira abordagem de código da estrutura de entidade (4.1.3). Tudo estava bem (eu estava criando as tabelas etc.) até começar a Seed.
Agora quando eu faço o
Add-Migration "remigrate" ; Update-Database;
Eu recebo um erro no console do pacote "Falha na validação para uma ou mais entidades. Consulte a propriedade 'EntityValidationErrors' para obter mais detalhes."
Eu tenho um ponto de interrupção no meu método Seed (), mas como estou executando isso no console quando o projeto não está em execução, não tenho noção de como obter os detalhes (PS - vi a validação do thread falhou para uma ou mais entidades enquanto salva as alterações no Banco de Dados SQL Server usando o Entity Framework, que mostra como posso ver a propriedade.)
Eu sei que meu método Seed () tem um problema, porque se eu colocar um retorno logo após a chamada do método, o erro desaparece. Então, como defino meu ponto de interrupção para poder ver qual é o erro de validação? Meio perdido. Ou existe alguma outra maneira de rastreá-lo no console de pepitas?
Respostas:
Também fiquei irritado com isso recentemente. Eu o corrigi colocando uma função de wrapper na classe Configuration no método Seed e substituindo as chamadas
SaveChanges
por chamadas para a minha função. Essa função simplesmente enumera os erros naEntityValidationErrors
coleção e retorna uma exceção em que a mensagem Exceção lista os problemas individuais. Isso faz com que a saída apareça no console do gerenciador de pacotes do NuGet.O código a seguir:
Basta substituir as chamadas
context.SaveChanges()
porSaveChanges(context)
no seu método de propagação.fonte
public override int SaveChanges()
dentro do contexto.Estenda sua classe DBContext já com uma definição de classe parcial!
Se você olhar para a definição de classe para o seu DbContext, será algo como o seguinte:
Portanto, em outro arquivo, você pode criar a mesma definição e substituir as partes que deseja.
Toda a ideia com classes parciais - você notou que o DbContext é uma classe parcial - é que você pode estender uma classe que foi gerada (ou organizar classes em vários arquivos) e, no nosso caso, também queremos substituir o método SaveChanges de dentro de uma classe parcial que adiciona ao DbContext .
Dessa forma, podemos obter informações de depuração de erros de todas as chamadas DbContext / SaveChanges existentes em todos os lugares e não precisamos alterar seu código Seed ou código de desenvolvimento.
Isto é o que eu faria ( note que a diferença é que eu apenas substituí o método SaveChanges na nossa classe parcial DbContext de autoria , NÃO NA GERADA ). Além disso, certifique-se de que a classe parcial use o espaço para nome correto ou você estará batendo a cabeça contra a parede.
fonte
Eu converti a resposta de Richards para um método de extensão:
Ligue assim:
fonte
Eu converti a versão do craigvl para C # e tive que adicionar context.SaveChanges (); para que funcione para mim como abaixo.
fonte
Richard, obrigado por me colocar no caminho certo (tinha o mesmo problema) abaixo é uma alternativa sem o wrapper que funcionou para mim no método de semente da configuração de migração:
Foi capaz de ver a exceção no console do gerenciador de pacotes. Espero que isso ajude alguém.
fonte
fonte