EF Core - Apresentando e usando o Migrations - II
Hoje vamos continuar a série de artigos que apresenta o Migrations e seus principais recursos. |
Atualmente (junho/2020) a versão estável do EF Core é a versão 3.1.4, mas já temos as versões preview do EF core 5.0.0 conforme você pode conferir aqui.
No artigo anterior explicamos como criar e aplicar migrações usando os EF Core e aprendemos também qual a finalidade dos métodos Up() e Down() nos arquivos de migração que herdam de Migration.
Ocorre que todo o código destes métodos são gerados pelo EF Core.
Será que podemos alterar o código gerado e incluir também nosso código personalizado ?
É claro que podemos.
Podemos usar o
parâmetro MigrationBuilder para acessar a ampla
variedade de métodos que podem nos ajudar no processo de inclur um código
personalizado. Um desses métodos é o método Sql que
podemos usar para adicionar o código personalizado que precisamos.
Então, para mostrar isso, vamos criar uma nova migração para poder incluir uma
nova coluna Sexo na tabela
Alunos.
Para isso vamos primeiro alterar o código da classe Aluno incluindo a propriedade Sexo tipo string:
using System; public class Aluno { public Guid Id { get; set; } [Required(ErrorMessage ="Informe o nome do aluno")] [MaxLength(80, ErrorMessage = "O nome deve ter no máximo 80 caracteres")] public string Nome { get; set; } public int? Idade { get; set; } public bool Ativo { get; set; } [MaxLength(10, ErrorMessage = "Informe o Sexo com no máximo 10 caracteres")] public string Sexo { get; set; } } |
Nota: Veja o projeto criado aqui.
A seguir vamos gerar uma migração usando o comando:
add-migration AjusteTabelaAlunos
A seguir vamos abrir o arquivo 20200610144144_AjusteColunaNome.cs que foi gerado e incluir o código destacado em azul onde estamos criando um procedimento armazenado para retornar todos os alunos com idade maior que um parâmetro que deverá ser passado:
using Microsoft.EntityFrameworkCore.Migrations;
namespace AspNet_EFCoreApi.Migrations
{
public partial class AjusteTabelaAlunos : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<string>(
name: "Sexo",
table: "Alunos",
maxLength: 10,
nullable: true);
migrationBuilder.Sql(@"CREATE PROCEDURE MacProcedure @idade as int
AS
SELECT * FROM Alunos Where Idade > @idade");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "Sexo",
table: "Alunos");
migrationBuilder.Sql(@"DROP PROCEDURE MacProcedure");
}
}
}
|
Note que no método Down() temos que incluir o código para remover a stored procedure macProcedure criada.
A seguir aplicando a migração com : update-database
Podemos examinar a estrutura da tabela Alunos no SQL Server Management Studio ou no Server Explorer no VS 2019.
Usando o Server Explorer vemos abaixo a coluna Sexo criada:
Também podemos visualizar a stored procedure MacProcedure que foi criada no banco de dados:
Vimos assim que podemos incluir um código personalizado no script de migração.
Na próxima parte do artigo veremos como criar a migração se os arquivos das entidades e do contexto estiverem em um projeto separado.
Pegue o projeto aqui : AlunosWeb.zip (sem as referências)
"Visto como na sabedoria de Deus o mundo não conheceu a
Deus pela sua sabedoria, aprouve a Deus salvar os crentes pela loucura da
pregação.
Porque os judeus pedem sinal, e os gregos buscam sabedoria;
Mas nós pregamos a Cristo crucificado, que é escândalo para os judeus, e loucura
para os gregos."
1 Coríntios 1:21-23
Referências:
EF Core 3.x - Atualizações recentes -
Curso Entity Framework Core 2.0 - Vídeo Aulas
EF Core - Usando a abordagem DataBase First ..
EF Core - Conceitos Básicos - Macoratti.net
Usando o EF Core com Windows Forms - (Crud ..