O Code First não é adequado para aplicações em larga escala. A recuperação do desenvolvimento de aplicativos em grande escala é muito grande.
Normalmente, o ciclo de vida do seu aplicativo de negócios é como,
- A versão 1 está em produção
- A versão 2 está na versão beta
- A versão 3 está em desenvolvimento ativo
- A versão 4 está em planejamento.
E existem outras pontes de comunicação entre aplicativos, algumas tarefas agendadas, alguma integração de terceiros, serviços da Web para alguns dispositivos de comunicação diferentes, como dispositivos móveis etc.
Eventualmente, o Code First usa o ObjectContext do Entity Model, o EF mais antigo gerando EDMX e o uso do ObjectContext com EntityObject foram realmente suficientes para tudo. Você pode personalizar facilmente o modelo de texto para gerar código. O método Detect Changes é mais lento com a implementação do ObjectContext, mas, em vez de gerar proxy, a equipe da EF poderia ter facilmente melhorado a velocidade de Detect Changes, em vez de reinventar o código primeiro.
Migração automatizada
A migração automatizada parece boa em teoria, mas impossível na prática quando você entra no ar. É bom apenas para a criação de protótipos, desenvolvendo algumas demos rápidas.
A migração do Code First não é de todo adequada nesse sistema. As versões 1 e 2 provavelmente conversam com o mesmo banco de dados. A versão 3 e a versão 4 geralmente são preparadas e têm um banco de dados diferente.
Primeiro banco de dados
O Database First é uma abordagem prática, é fácil comparar, visualizar e manter scripts SQL. DBAs podem trabalhar com facilidade.
Modelos de texto
Criamos nossos próprios modelos de texto para consultar e criar EDMX e ObjectContext com pouca implementação personalizada que resolve problemas de desempenho. Existem vários aplicativos com várias versões se comunicando com o mesmo banco de dados sem problemas.
Para mim, clicar com o botão direito do mouse no arquivo .tt e clicar em "Executar ferramenta personalizada" é a etapa mais rápida e fácil do que escrever classes, configurar e criar modelo.