Deixe-me colocar em outro ponto de vista. A manutenção do banco de dados do Entity Framework é totalmente inútil em qualquer empresa ou projeto de banco de dados grande.
Os problemas são:
Atualizações automáticas de esquema. Isso não é absolutamente o que eu quero, pois viola totalmente os fundamentos da manutenção do banco de dados. Os problemas são: (a) alguém executando uma versão mais recente atualiza o banco de dados em vez de obter um problema e (b) as atualizações são agendadas com o dba normalmente fazendo um backup primeiro. Portanto, as atualizações automáticas são inúteis.
A criação de banco de dados só funciona em casos de borda basicamente degenerados. Nem tente usar recursos avançados de banco de dados - independentemente de qual deles. Exemplo de servidor SQL: campos incluídos em índices, filtros em índices, particionamento, compactação, regras de validação para campos.
Migração - assume casos de degeneração novamente: sem transformação de dados ou atualização em várias etapas facilmente. Exemplo: A Tabela X possui um campo histórico de "usuário" que registra que o usuário faz alguma coisa. A nova configuração possui uma tabela Usuário, portanto, é necessário criar a tabela do usuário, criar os usuários, criar o campo de referência do usuário na tabela x, atualizá-lo com o usuário da tabela do usuário e excluir o campo do usuário.
A única maneira sensata de lidar com esses cenários são os scripts de geração e migração e o controle de versão adequado.
Agora, o SSDT - que é uma ótima ferramenta para versionar uma versão específica do banco de dados muito melhor do que o Entity Framework, porque na verdade - funciona. Como em: registra todos os recursos. Em nenhum dos bancos de dados que tenho, eu poderia usar o código primeiro - porque sempre temos índices filtrados pelo menos;) A EF nem sequer me levava a 10% do que eu precisava.
Nossa abordagem é:
Projete o banco de dados no banco de dados e sincronize com um módulo SSDT que é verificado. A sincronização de esquema permite que os desenvolvedores atualizem sua versão rapidamente. Sempre há um banco de dados mestre autoritário com a versão atual em algum lugar (em um servidor especial), portanto, temos uma versão de referência para trabalhar.
Gere scripts delta conforme necessário para liberações que também são versionadas e possuem um bom mecanismo para implementá-las em um banco de dados.