Pergunta sobre ef-migrations, entity-framework – Como usar as migrações em um banco de dados existente na produção criada usando o Entity Framework 4.1?

12

Eu tenho um sistema em produção que foi criado com o primeiro código do Entity Framework 4.1. Agora, atualizei para o 4.3 e preciso aplicar migrações, mas há vários casos de uso que preciso abordar:

Um novo desenvolvedor precisa do banco de dados criado a partir do zero com dados iniciais. (OSeed() método também aplica alguns índices exclusivos.)O ambiente de produção precisa apenas das alterações não aplicadas aplicadas. (Mas tenha em mente que este banco de dados foi criado no EF 4.1, que não possui migrações).

Como faço para criar as migrações e um inicializador (ou inicializadores) para cobrir esses dois casos?

Sua resposta

1   a resposta
27

você precisará fazer um pouco de trabalho para prepará-lo para uso comMigrações. Comece com uma cópia do seu código de produção atual em execução em um ambiente de desenvolvimento.Certifique-se de que o banco de dados dev não exista.

Atualize o projeto para usar o EF 4.3 (ou posterior) com Migrações e crie a migração inicial para o instantâneo com a aparência da produção.

Update-Package EntityFramework
Enable-Migrations
Add-Migration InitialCreate  

Substitua seus inicializadores de banco de dados pelo código Migrations correspondente.

Para dados de semente, adicione-o aoSeed() método doMigrations\Configuration.cs Arquivo. Note que, ao contrário doSeed() método em inicializadores, este método é executado toda vezUpdate-Database é chamado. Pode ser necessário atualizar as linhas (redefinir os dados da semente) em vez de inseri-las. oAddOrUpdate() método pode ajudar com isso.

Já que seus indecies exclusivos podem agora ser criados com Migrações, você deve adicioná-los aoUp() método da migração InitialCreate. Você pode encadeá-losCreateTable() chamadas usando oIndex() método ou chamando oCreateIndex() método.

Você pode usar oMigrateDatabaseToLatestVersion inicializador agora para executar Migrações durante a inicialização.

Obtenha um script para inicializar seu ambiente de produção.

Update-Database -Script

A partir do script que é gerado, você vai querer deletar quase tudo desde que as tabelas já existam. As partes que você precisa são asCREATE TABLE [__MigrationHistory] eINSERT INTO [__MigrationHistory] afirmações.

Opcionalmente, solte oEdmMetadata tabela, uma vez que não é mais necessário.

Depois de fazer essas coisas, você deve ser bom para ir com migrações. Novos desenvolvedores podem executarUpdate-Database para criar o banco de dados a partir do zero, e você pode executarUpdate-Database (ou use o inicializador Migrations) em relação à produção para aplicar migrações adicionais.

A maior parte disso ainda é verdade na EF 5.0.0. Para converter de migrações automáticas para migrações explícitas, tive que seguir a maioria dessas etapas. Albert Bori
Mais uma pergunta - isso significa que teremos que escrever migrações para migrar o banco de dados de nada para o estado de produção atual? O InitialCreate está vazio quando o geramos. Josh Kodroff
Isso é ótimo! Muito obrigado! Josh Kodroff
Está bem. Eu prefiro que a equipe da EF trabalhe para tornar as coisas melhores para todos os projetos daqui para frente do que se preocupar com compatibilidade retroativa. Josh Kodroff

Perguntas relacionadas