A depender da quantidade de entidades da sua aplicação e da complexidade da configuração pode ser interessante configurar as entidades individualmente. Segue abaixo um exemplo da configuração da entidade Compras.
using Microsoft.EntityFrameworkCore;
namespace MeuProjeto.Compras
{
// 4. Configuração Fluent API
public class CompraConfiguration : IEntityTypeConfiguration<Compra>
{
public void Configure(EntityTypeBuilder<Compra> builder)
{
builder.HasKey(c => c.Id);
builder.Property(c => c.DataCompra)
.IsRequired();
builder.Property(c => c.ValorTotal)
.HasColumnType("decimal(18,2)");
// Configurando CompraItem como Owned Entity Type (Owned Collection)
builder.OwnsMany(c => c.Itens, item =>
{
item.WithOwner().HasForeignKey("CompraId");
item.Property<int>("Id"); // Chave sombra implícita
item.HasKey("Id");
item.Property(i => i.Produto)
.IsRequired()
.HasMaxLength(150);
item.Property(i => i.PrecoUnitario)
.HasColumnType("decimal(18,2)");
});
// Exemplo de configuração de navegação como Backing Field
builder.Metadata.FindNavigation(nameof(Compra.Itens))
.SetPropertyAccessMode(PropertyAccessMode.Field);
}
}
}
DbContext a escanear o assembly (projeto) em busca de todas as classes que implementam IEntityTypeConfiguration. O EF Core localiza e aplica todas elas automaticamente de uma só vez. Isso é possível através do código a seguir:OnModelCreating, usando o operador new:DbContext é utilizado). O EF Core processa essas regras, monta o modelo de metadados do banco de dados na memória e o coloca em cache. Como não é uma operação executada a cada requisição, não há necessidade de gerenciá-la via injeção de dependência.
Comentários