DEV Community

Yuri Peixinho
Yuri Peixinho

Posted on • Edited on

onModelCreating

As vezes é necessário configurações e comportamentos adicionais em seus modelos e banco de dados. Caso seja necessário, podemos utilizar o onModelCreating. É um método especial do DbContext que existe pra você configurar qualquer coisa relacionada ao comportamento das suas entidades no EF Core.

Nele dá pra fazer praticamente tudo que envolve mapeamento, configuração, regras do banco, comportamentos extras, definições que o EF Core precisa saber antes de gerar o modelo e muito mais.

Exemplos de uso dentro do OnModelCreating

1. Definir configuração de entidades (Fluent API)

modelBuilder.Entity<Restaurante>().HasKey(x => x.Id);
Enter fullscreen mode Exit fullscreen mode

2. Adicionar dados iniciais (Seed)

modelBuilder.Entity<Restaurante>().HasData(
    new Restaurante { Id = 1, Nome = "Picanha Prime" }
);
Enter fullscreen mode Exit fullscreen mode

3. Definir conversão de tipos

modelBuilder.Entity<Pedido>()
    .Property(p => p.Status)
    .HasConversion<string>();
Enter fullscreen mode Exit fullscreen mode

4. Ignorar propriedades/classes

modelBuilder.Entity<Restaurante>().Ignore(x => x.CalculoInterno);
Enter fullscreen mode Exit fullscreen mode

Boas Práticas (modularizar o arquivo de configuração)

Tudo isso poderia ser feito dentro do método OnModelCreating diretamente, mas na prática profissional jogamos as classes de configurações em arquivos separados e chamamos a configuração pelo arquivo de contexto. Então:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.ApplyConfigurationsFromAssembly(typeof(AppDbContext).Assembly);
}
Enter fullscreen mode Exit fullscreen mode

E joga as configurações pra classes separadas:

public class RestauranteConfiguration : IEntityTypeConfiguration<Restaurante>
{
    public void Configure(EntityTypeBuilder<Restaurante> builder)
    {
        builder.HasKey(x => x.Id);
        ...
    }
}
Enter fullscreen mode Exit fullscreen mode

Isso mantém o OnModelCreating limpo e organizado.

Data/

├── Context/
   └── AppDbContext.cs (OnModelCreating limpo)

├── Configurations/
   ├── RestauranteConfiguration.cs
   ├── ReservaConfiguration.cs
   └── PedidoConfiguration.cs
Enter fullscreen mode Exit fullscreen mode

👈🏻 Voltar leitura
👉🏻 Continuar leitura

Top comments (0)