Como inicializar EF Code First Migrations em um destino remoto
-
11-12-2019 - |
Pergunta
Gostaria de apresentar o Code First Migrations ao meu projeto, mas não tenho certeza de como lidar com a implantação disso no meu cliente para teste.Até agora, as coisas têm sido bastante simples e acabei de usar um CreateDatabaseIfNotExists
inicializador.Agora, tenho dois cenários:
Ele exclui seu banco de dados existente, antes das migrações, e usa um inicializador para criar um novo banco de dados com migrações, e usamos migrações a partir de agora para atualizar seu banco de dados.Posso usar o
MigrateDatabaseToLatestVersion
inicializador para criar o banco de dados se estiver faltando também?Acabei de implantar meu código e deixá-lo realizar migrações.Não tenho certeza se alguma coisa, mas usando um
MigrateDatabaseToLatestVersion
é necessário aqui.Isso atualizará um banco de dados pré-migrações para um banco de dados adequado para migrações?
Solução
Isto é o que faço quando a migração automática é necessária;Espero que isso ajude você a encontrar uma solução:
Database.SetInitializer(
new MigrateDatabaseToLatestVersion<ContextFileName, PathToMigrationsConfig>()
);
Database.Initialize(false);
No arquivo de configuração das migrações, defini o seguinte no construtor
AutomaticMigrationsEnabled = true;
AutomaticMigrationDataLossAllowed = false;
No arquivo de configuração você deve substituir o método seed; caso contrário, você pode adicioná-lo e preencher seus dados iniciais.
O que o procedimento acima fará é criar/atualizar o banco de dados para o mais recente, desde que não ocorra perda de dados.Isso deve permitir que você entregue o código ao cliente.
Por outro lado, para um sistema de produção, normalmente defenderei a questão de não fazer isso.Isto tinha muitas desvantagens.Para bancos de dados sobre os quais não tenho controle, ainda não encontrei um cliente que recusou o arquivo de script gerado.
Você pode obter isso usando o seguinte comando depois de adicionar uma migração por meio do Console do Gerenciador de Pacotes:
Update-database –script -verbose