Mapeamento de propriedades | IEntityTypeConfiguration | EFCore
- Mapeamento de propriedades | IEntityTypeConfiguration | EFCore
Não, você não é obrigado a usar a classe de configuração (IEntityTypeConfiguration) para que uma propriedade nova seja mapeada no banco.
O EF Core por padrão usa o mapeamento por convenção, ou seja:
Se você adiciona uma nova propriedade pública ao seu modelo (
HarvestModel) e essa propriedade é de um tipo suportado (ex:int,string,DateTime, etc), o EF já entende e mapeia automaticamente.
✅ Exemplo prático:
Modelo:
public class HarvestModel
{
public int Id { get; set; }
public string Name { get; set; } // Já existente
public DateTime StartDate { get; set; } // Propriedade nova
}
Mesmo sem ter nada na configuração, o EF Core já vai mapear StartDate porque segue as convenções padrão.
✅ Quando você precisa da configuração (HarvestConfiguration)?
Você só precisa criar a configuração com IEntityTypeConfiguration<HarvestModel> quando quiser:
| Caso de uso | Exemplo |
|---|---|
| Mudar nome da coluna | builder.Property(p => p.Name).HasColumnName("Nome"); |
| Alterar tipo/tamanho | HasMaxLength(50) |
| Restringir campos obrigatórios | IsRequired() |
| Mapear entidades complexas | OwnsOne(...) |
| Definir chaves compostas | HasKey(...) |
| Relacionamentos | HasMany().WithOne() |
| Índices | HasIndex(...) |
✅ Então por que usar HarvestConfiguration?
Mesmo que não seja obrigatório, usar classes de configuração separadas é uma boa prática para:
- Deixar os modelos mais limpos (separação de responsabilidades)
- Aplicar regras mais complexas
- Reutilizar convenções de forma consistente
E o EF só vai aplicar a configuração se ela for registrada, por exemplo via:
modelBuilder.ApplyConfiguration(new HarvestConfiguration());
Ou dinamicamente:
modelBuilder.ApplyConfigurationsFromAssembly(typeof(AppDbContext).Assembly);