Tutorial para Aplicar Migrations em Aplicações ASP.NET
Published: 2021-07-24 17:19:51

Para realizar esta tarefa criei dois projetos para exemplificar os dois métodos possíveis a fim de criar e mapear classes para tabelas em bancos de dados. Um utilizando System.ComponentModel.DataAnnotations e outro o método OnModelCreating.

##Usando OnModelCreating

O primeiro projeto a ser criado é o ef-sem-annotations, criamos ele através do comando:

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vm7u97qlfmrsiiynrl08.png)

Nele iremos precisar instalar dois pacotes o MySql.Data.EntityFrameworkCore versão 8.0.22 e Microsoft.EntityFrameworkCore.Design versão 3.1.10.

Após a criação do projeto criamos a classe Pessoa que irá representar a nossa tabela.
 
![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ftsgnwrlsjrr9pq4p08v.png)
 
Depois criamos a classe DataContext que será a nossa orquestradora, onde iremos declarar efetivamente que a classe Pessoa é o mapeamento de uma tabela.

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/oz4f6s6n8q6k47temcvs.png)

O próximo passo é criar a connection string com o nosso banco de dados.

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sqosx2eepxm58fx4m8qb.png)

Feito isso podemos aplicar a migration com os seguintes comandos:

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lxh3fu3i802t153jen49.png)

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rdd6vt2jqf165fq35y1y.png)

Ao aplicar a migration podemos conferir o resultado no banco de dados. Repare nos tipos e nas regras de cada coluna, são bem genéricas. Mas isso acontece por que não aplicamos nenhuma regra.

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pc6gp9pl6vxragdo71n3.png)

O primeiro modo de aplicar regras a essa migration é utilizando a sobrescrita do método OnModelCreating na classe DataContext.

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hqzvsq6oh1mzau23wvd5.png)

Repare que agora os campos Nome e Idade são obrigatórios e o primeiro tem o tamanho máximo de 30 caracteres. Para aplicar essas regras ao banco de dados executamos uma nova migration

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/98f8i0jp3jxd4m6xjhe2.png)

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uakwyy6c9zue1qj7zeeu.png)

Com isso temos o novo resultado no banco de dados:

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yntawv5nh1wd2xtusd5k.png)

##Usando Annotations

O segundo projeto chamado ef-com-annotations foi criado como uma WebApi também.

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/48x3ye7udco4czwo7csy.png)

Nele iremos precisar instalar dois pacotes o MySql.Data.EntityFrameworkCore versão 8.0.22 e Microsoft.EntityFrameworkCore.Design versão 3.1.10.

Utilizamos o pacote System.ComponentModel.DataAnnotations na construção da classe Pessoa.

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rls8haah0kmv1g6x37w0.png)

A classe DataContext fica:

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6ynzb1a4fnrd3z61xf02.png)

A nossa string de conexão fica:

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/emqwwgjfi0xvo97fcqjk.png)

E então podemos aplicar a nossa migration:

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h6ylgohu05v5k2c0sgw8.png)

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u8q920j1bi1nw1rtldn2.png)

O resultado desse código no banco de dados é o seguinte:

![image](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tpzgcuvnqupo8erebp4m.png)

Repare que em ambos métodos chegamos ao mesmo resultado, porém um com menos código que outro. Essas são duas formas possíveis de mapear classes para bancos de dados, basta você analisar qual das duas é mais adequada para a sua solução.