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.
modelBuilder.Entity<Restaurante>().HasKey(x => x.Id);
modelBuilder.Entity<Restaurante>().HasData(
new Restaurante { Id = 1, Nome = "Picanha Prime" }
);
modelBuilder.Entity<Pedido>()
.Property(p => p.Status)
.HasConversion<string>();
modelBuilder.Entity<Restaurante>().Ignore(x => x.CalculoInterno);
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