Migração Code First com cadeias de conexão
-
12-11-2019 - |
Pergunta
Consegui colocar o Code First em execução e ele funciona muito bem.
Como ainda estou desenvolvendo a aplicação a estrutura do Banco de Dados não está finalizada e por isso preciso implementar migrações.
Eu segui o Postagem oficial do blog e fiz com que o comando Update-Database funcionasse.
No entanto, isso atualiza apenas a versão SQLExpress do banco de dados.A versão de produção do banco de dados está no Azure e eu especifico a cadeia de conexão em tempo de execução para que o comando Update-Database não funcione nisso.
Então minha última pergunta é:como aplico migrações automáticas ao banco de dados de produção cuja cadeia de conexão é especificada em tempo de execução?
Solução
No console do gerenciador de pacotes, digite:
Get-Help Update-Database
Parte relevante:
Update-Database [-SourceMigration <String>] [-TargetMigration <String>] [-Script] [-Force] [-ProjectName <String>] [-StartUpProjectName <String>] [-ConfigurationTypeName <String>] [-ConnectionStringName <String>] [<Com
monParameters>]
Então você pode fazer um Update-Database -ConnectionStringName "MyConnectionString"
e deve funcionar perfeitamente.
Você também tem um MigrateDatabaseToLatestVersion
inicializador de banco de dados, se você configurá-lo (via Database.SetInitializer()
), quando você implanta seu aplicativo em produção com a string de conexão adequada, no primeiro acesso ao banco de dados ele deve migrar automaticamente seu banco de dados para a versão mais recente.
Sugiro cautela, porém, sempre faça backup das coisas.
Atualizar
Os comentários recentes de @Alexy Strakh geraram outro argumento que vale a pena colocar na resposta.
Configurar corretamente um sistema de implantação usando Migrações do Code First, considerando 2 ConnectionStrings.
- Defina suas strings de conexão em web.config (prod e dev), com senhas padrão
- Faça com que o sistema de configuração do seu aplicativo conheça as configurações de conexão prod e dev e, opcionalmente, crie testes de unidade para garantir que o correto seja escolhido*
- Empregar transformação de arquivo de configuração e faça com que ele transforme seu web.config naquele com valores de produção
- Implante seu pacote em produção (esta deve ser a maneira mais inovadora)
Você não deve interagir com o ambiente de produção a partir da sua caixa de desenvolvimento, mas se você realmente precisa fazer isso e, em seguida, crie uma solução temporária que precise ser revertida assim que terminar.
Outra opção é simplesmente usar Web.Debug.config e Web.Release.config e ter um modelo central para o web.config principal (que seria o único que você faz check-in em seu controle de origem).
Apenas certifique-se de nunca verificar as senhas de produção ou desenvolvimento pessoal (se houver).
*Você pode usar o símbolo DEBUG para verificar como o aplicativo está sendo executado.
Outras dicas
Tem uma solução que considero menos trabalho intensivo a longo prazo. Como se você criasse uma string de conexão com o mesmo nome
no seu contexto : Base ("dbname")
Nome da cadeia de conexão e catalog inicial correspondem ao dbname que você especificou e você não precisa inserir o nome da cadeia de conexão toda vez.