Eu queria depurar o Seed()
método em minha classe de configuração de banco de dados do Entity Framework quando executo Update-Database
no Console do gerenciador de pacotes, mas não sabia como fazer. Gostaria de compartilhar a solução com outras pessoas, caso tenham o mesmo problema.
entity-framework-5
Sachin Kainth
fonte
fonte
migrate.exe
do console para conectar o Visual Studio atualmente em execução. Mais informações nesta resposta: stackoverflow.com/a/52700520/350384A maneira como resolvi isso foi abrir uma nova instância do Visual Studio e, em seguida, abrir a mesma solução nesta nova instância do Visual Studio. Em seguida, anexei o depurador nesta nova instância à instância antiga (devenv.exe) ao executar o comando update-database. Isso me permitiu depurar o método Seed.
Apenas para ter certeza de que não perdi o ponto de interrupção por não anexar a tempo, adicionei um Thread.Sleep antes do ponto de interrupção.
Espero que isso ajude alguém.
fonte
Se você precisar obter o valor de uma variável específica, um truque rápido é lançar uma exceção:
fonte
Uma solução mais limpa (acho que isso requer EF 6) seria IMHO chamar update-database a partir do código:
Isso permite que você depure o método Seed.
Você pode dar um passo adiante e construir um teste de unidade (ou, mais precisamente, um teste de integração) que cria um banco de dados de teste vazio, aplica todas as migrações EF, executa o método Seed e descarta o banco de dados de teste novamente:
Mas tome cuidado para não executar isso em seu banco de dados de desenvolvimento!
fonte
Eu sei que esta é uma pergunta antiga, mas se tudo o que você quer são mensagens e não se importa em incluir referências a WinForms em seu projeto, criei uma janela de depuração simples para a qual posso enviar eventos de rastreamento.
Para uma depuração mais séria e passo a passo, abrirei outra instância do Visual Studio, mas não é necessário para coisas simples.
Este é o código completo:
SeedApplicationContext.cs
E em seu Configuration.cs padrão
fonte
SeedInternal
método possa usá-lo)Uh Debugging é uma coisa, mas não se esqueça de chamar: context.Update ()
Também não envolva try catch sem que uma boa exceção interna se espalhe para o console.
https://coderwall.com/p/fbcyaw/debug-into-entity-framework-code-first com captura (DbEntityValidationException ex)
fonte
Eu tenho 2 soluções alternativas (sem,
Debugger.Launch()
uma vez que não funciona para mim):Para imprimir a mensagem no console do gerenciador de pacotes, use a exceção:
throw new Exception("Your message");
Outra forma é imprimir a mensagem em arquivo criando um
cmd
processo:fonte