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().HasKey(x => x.Id); 2. Adicionar dados iniciais (Seed) modelBuilder.Entity().HasData( new Restaurante { Id = 1, Nome = "Picanha Prime" } ); 3. Definir conversão de tipos modelBuilder.Entity() .Property(p => p.Status) .HasConversion(); 4. Ignorar propriedades/classes modelBuilder.Entity().Ignore(x => x.CalculoInterno); 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); } E joga as configurações pra classes separadas: public class RestauranteConfiguration : IEntityTypeConfiguration { public void Configure(EntityTypeBuilder builder) { builder.HasKey(x => x.Id); ... } } Isso mantém o OnModelCreating limpo e organizado. Data/ │ ├── Context/ │ └── AppDbContext.cs (OnModelCreating limpo) │ ├── Configurations/ │ ├── RestauranteConfiguration.cs │ ├── ReservaConfiguration.cs │ └── PedidoConfiguration.cs

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);
2. Adicionar dados iniciais (Seed)
modelBuilder.Entity<Restaurante>().HasData(
new Restaurante { Id = 1, Nome = "Picanha Prime" }
);
3. Definir conversão de tipos
modelBuilder.Entity<Pedido>()
.Property(p => p.Status)
.HasConversion<string>();
4. Ignorar propriedades/classes
modelBuilder.Entity<Restaurante>().Ignore(x => x.CalculoInterno);
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);
}
E joga as configurações pra classes separadas:
public class RestauranteConfiguration : IEntityTypeConfiguration<Restaurante>
{
public void Configure(EntityTypeBuilder<Restaurante> builder)
{
builder.HasKey(x => x.Id);
...
}
}
Isso mantém o OnModelCreating limpo e organizado.
Data/
│
├── Context/
│ └── AppDbContext.cs (OnModelCreating limpo)
│
├── Configurations/
│ ├── RestauranteConfiguration.cs
│ ├── ReservaConfiguration.cs
│ └── PedidoConfiguration.cs