3 razões para usar o primeiro design de código com o Entity Framework
1) Menos crosta, menos inchaço
O uso de um banco de dados existente para gerar um arquivo de modelo .edmx e os modelos de código associados resulta em uma pilha gigante de código gerado automaticamente. Você está implorado para nunca tocar nesses arquivos gerados, para que não quebre algo ou que suas alterações sejam substituídas na próxima geração. O contexto e o inicializador também estão congestionados nessa bagunça. Quando você precisar adicionar funcionalidade aos seus modelos gerados, como uma propriedade somente leitura calculada, precisará estender a classe do modelo. Isso acaba sendo um requisito para quase todos os modelos e você acaba com uma extensão para tudo.
Com o código primeiro, seus modelos codificados manualmente se tornam seu banco de dados. Os arquivos exatos que você está construindo são o que gera o design do banco de dados. Não há arquivos adicionais e não há necessidade de criar uma extensão de classe quando você deseja adicionar propriedades ou qualquer outra coisa que o banco de dados não precise conhecer. Você pode apenas adicioná-los à mesma classe, desde que siga a sintaxe apropriada. Heck, você pode até gerar um arquivo Model.edmx para visualizar seu código, se desejar.
2) Maior controle
Quando você utiliza o DB primeiro, está à mercê do que é gerado para seus modelos para uso em seu aplicativo. Ocasionalmente, a convenção de nomenclatura é indesejável. Às vezes, os relacionamentos e associações não são exatamente o que você deseja. Outras vezes, relacionamentos não transitórios com o carregamento lento causam estragos nas respostas da API.
Embora quase sempre exista uma solução para os problemas de geração de modelo que você possa encontrar, o código inicial fornece um controle completo e refinado desde o início. Você pode controlar todos os aspectos dos modelos de código e do design do banco de dados a partir do conforto do seu objeto de negócios. Você pode especificar com precisão relacionamentos, restrições e associações. Você pode definir simultaneamente os limites de caracteres da propriedade e os tamanhos das colunas do banco de dados. Você pode especificar quais coleções relacionadas devem ser carregadas com antecedência ou não devem ser serializadas. Em resumo, você é responsável por mais coisas, mas está no controle total do design do seu aplicativo.
3) Controle de versão do banco de dados
Este é um grande problema. O controle de versão dos bancos de dados é difícil, mas com as migrações primeiro e primeiro, é muito mais eficaz. Como o esquema do banco de dados é totalmente baseado em seus modelos de código, por versão que controla o código-fonte, você ajuda a versão do banco de dados. Você é responsável por controlar sua inicialização de contexto, o que pode ajudá-lo a executar ações como propagação de dados corporativos fixos. Você também é responsável por criar as primeiras migrações de código.
Quando você habilita as migrações pela primeira vez, uma classe de configuração e uma migração inicial são geradas. A migração inicial é seu esquema atual ou sua linha de base v1.0. A partir desse ponto, você adicionará migrações com timestamp e rotuladas com um descritor para ajudar no pedido de versões. Quando você chama add-migration a partir do gerenciador de pacotes, um novo arquivo de migração será gerado contendo tudo o que foi alterado no seu modelo de código automaticamente nas funções UP () e DOWN (). A função UP aplica as alterações no banco de dados, a função DOWN remove essas mesmas alterações no evento que você deseja reverter. Além disso, você pode editar esses arquivos de migração para adicionar alterações adicionais, como novas visualizações, índices, procedimentos armazenados e qualquer outra coisa. Eles se tornarão um verdadeiro sistema de versão para o seu esquema de banco de dados.