Migrations

Introdução

Nesta seção faremos uso conceitos abordados na documentação de arquitetura do projeto de Migrations.

Executando o projeto de migrations

O projeto de Migrations está localizado no diretório "..\Infrastructure\Data\Osb.Core.Infrastructure.Data.Migrations". Certifique-se que o código do projeto está atualizado e configure a string de conexão com a base de dados do PostgreSQL no arquivo appsettings.json.

  • A string de conexão deve ser configurada na variável "core" dentro de "ConnectionStrings";
  • Informe a versão da migration mais atual na variável "VersionMigration" dentro de "Settings". Aqui é possível escolher a versão da migration a ser executada. Tenha ciência que sua execução funciona de forma em cadeia, ou seja, a migration mais recente executará todas as suas anteriores antes dela.
  • Abra o projeto das migrations em um console, e execute o comando:

dotnet run

  • Caso haja algum problema na versão, ela não é persistida.
  • Para executar a função Up() digita-se 1 realizando alterações nas tabelas, colunas, tipos de dados, procedures, etc. No caso da opção 2, Down(), as alterações da migration são desfeitas.

Após os procedimentos realizados, a base de dados do PostgreSQL deve estar preenchida com as estruturas de dados para o funcionamento das demais aplicações.

Criação de migrations

Para criação dos arquivos de migrations existem algumas orientações que devem ser consideradas. Vamos começar pela nomenclatura dos arquivos.

Nomenclatura dos arquivos

  • Todo arquivo(classe) deve ter a letra V (maiúscula) no início;
  • Após o prefixo deve ter a data (começando pelo ano, mês e dia) e a hora (com segundos). É importante usar a data atual para garantir que a migration nova seja mais atual em relação as anteriores;
  • Em seguida coloca-se um "_" (underline) seguido de uma "palavra reservada", algo que ajude na identificação da migration. Pode ser uma palavra em relação as atualizações que ela realizará, ao time que a desenvolveu ou a tarefa a qual ela pertence;
  • Por fim, coloca-se mais um "_" (underline) seguido de um “V” e o número da versão da migration que está sendo criada;

Observe a imagem:

V - início

2022 - ano

09 - mês

01 - dia

17 - hora

57 - minutos

01 - segundos

"_" - underline para separar

"palavra reservada"

"_" - underline para separar

V - letra maiúscula

0 - versão

.cs - extensão do arquivo

Veja o resultado do arquivo do exemplo: V20210901175701_Migration_V0.cs

Criando uma migration

A versão real da migration deve estar dentro da classe e é composta segundo o padrão abaixo:

  • Podemos criar um arquivo .cs de migration e adicionar a versão dela: data(ano/mês/dia) e hora(hora/minuto/segundo). Veja a imagem abaixo:
  • Dentro da pasta de Scripts, devemos ter as procedures necessárias para versão. O nome da pasta se dá na mesma nomenclatura do arquivo da migration. Veja a imagem a seguir:
  • No arquivo .cs efinimos o diretório dos scripts.
  • Criamos os métodos Up() e Down() na classe da nova migration. São métodos herdados da classe Migration. Observe o exemplo:
  • Colocamos a versão da migration que a ser executada no appsettings.json.
  • Por fim, podemos executar a migration conforme descrito na primeira seção desta página.

É possível verificar se a versão executada foi persistida. Para conferir, uma vez executado o Fluent Migrator é então criada uma tabela "VersionInfo" com todas as migrations correntes até o momento. Na imagem abaixo percebemos que a versão mais atual é a V5.

Lembre-se, a versão que estiver sendo criada deve ser superior a última versão da migration na base de dados, por isso utilizamos data e hora.

Referencias
(Migrações de esquema fácil em — do núcleo .NET por Manfred Lange — A startup — Média)
https://fluentmigrator.github.io/articles/intro.htmlhttps://medium.com/swlh/easy-schema-migrations-in-net-core-abd214fa054c

(FluentMigrator in ASP.Net Core - .Net Core Central)
https://dotnetcorecentral.com/blog/fluentmigrator/

(Documentação Oficial)
https://fluentmigrator.github.io/articles/intro.html