Vamos explorar como criar migrações mais limpas e organizadas usando FluentMigrator
e o banco de dados MySQL
.
Pré-requisitos:
- MySQL
Começaremos com as configurações mais básicas. Não vou detalhar cada elemento ou como funciona, pois estou assumindo que você já possui algum conhecimento em WebApi com ASP.NET. O projeto que estarei usando segue o padrão arquitetural Clean Architecture, com os projetos separados em camadas. No entanto, sinta-se à vontade para adaptar conforme sua preferência, a implementação será a mesma.
Configurando a ConnectionString
No arquivo appsettings.json, adicione:
Aqui, estamos definindo o nome do banco de dados.
Em seguida, crie um arquivo chamado appsettings.Development.json e adicione a ConnectionString:
Certifique-se de que a senha corresponde à do seu MySQL.
Agora, vamos criar um método de extensão para obter o nome do banco de dados, a conexão e a conexão completa. Este método reduz a duplicidade de código, permitindo a reutilização do método.
Adicione o pacote para ter acesso à interface IConfiguration:
No projeto Domain, em Extension/, adicione:
Com essas configurações básicas concluídas, vamos agora para o projeto Infrastructure, onde toda a configuração do banco de dados será realizada.
Verificação do schema
Após configurar a ConnectionString vamos verificar se o schema do database já existe no MySQL. Caso não exista, será criado com o nome configurado no arquivo appsettings.json.
Para realizar essa verificação, precisaremos de dois pacotes:
Crie uma pasta chamada Migrations e, dentro dela, crie a classe Database:
Essa classe será estática e conterá um método que recebe como parâmetros a string de conexão e o nome do database.
Vamos estabelecer uma conexão com o banco de dados e criar um parâmetro dinâmico que recebe o nome do database para ser passado para a consulta:
Por fim, adicionamos a consulta SQL, que realiza um SELECT
para verificar no MySQL se existe um schema com o nome passado pelo parâmetro:
Se não houver registros, o database será criado com o nome passado por parâmetro.
Main
Para que o método funcione, é necessário chamá-lo na classe principal do projeto, onde os serviços estão contidos.
No arquivo Program.cs, crie uma função para chamar o método e passar os parâmetros:
Agora, chame a função:
Ao executar o projeto poderá verificar no MySQL que o schema foi gerado.
Próximo passo é configurar as migrações para gerar as tabelas.
FluentMigrator com MySQL para migrações de esquemas mais simples Pt.2