Tenho programado recentemente com o Entity Framework 4.1 Code First e estou adorando o desenvolvimento, mas com apenas um plano final e uma lista de recursos que muda rapidamente, estou constantemente modificando o Class / Database para atender às necessidades dos aplicativos.
No desenvolvimento, não há dados ativos e eu posso facilmente excluir todo o banco de dados, para que seja recriado com o novo esquema, no entanto, obviamente, quando ativos - isso é muito ruim!
As únicas soluções que posso ver são descartar a tabela de metadados e manter manualmente o banco de dados em sincronia ou basicamente descartar e reenviar.
Pessoalmente, prefiro o primeiro método, pois acho que será muito mais fácil adicionar uma coluna / tabela do que recriar e migrar dados, mas, a menos que eu tenha perdido alguma coisa, isso será completamente diferente do Code First.
Portanto, a questão é: o Code First é apenas sobre o desenvolvimento inicial e qual é uma boa estratégia para gerenciar o EF em um ambiente de produção?
fonte
Respostas:
Minha opinião é que a criação automática de banco de dados do code first é apenas para desenvolvimento. Respondi a perguntas semelhantes no Stack Overflow, onde descrevi como atualizar o banco de dados e por que a funcionalidade automática é ruim na produção:
Atualizar o banco de dados é tarefa semi-manual. Não deve haver mágica automática não testada por trás - além disso, o EF 4.1 atualmente não possui essa mágica disponível (há apenas uma apresentação sobre os recursos que a equipe do ADO.NET está trabalhando).
Você também pode verificar esta pergunta para entender melhor como os sites são atualizados.
fonte
Manter scripts de atualização .
No próprio banco de dados, mantenha uma tabela na qual um registro é mantido com a versão do esquema.
Quando você inicia o aplicativo, ele detecta a versão com a versão que deveria ser usada pelos binários. Se for diferente, execute (ou peça ao usuário) os scripts de atualização.
Não se esqueça de fazer backup do banco de dados primeiro.
fonte
De alguma forma, a questão é falha, pois ela faz conexões entre o modelo de programação e o ambiente de tempo de execução onde não há.
O código primeiro é principalmente um driver de velocidade de desenvolvimento e não está realmente conectado ao sistema de tempo de execução.
Na produção, você terá adequadamente uma configuração que nega ao tempo de execução a possibilidade de excluir / atualizar o modelo db.
fonte