Skip to content

07. EntityTypeConfiguration

CodeDesignPlus edited this page Jan 5, 2021 · 2 revisions

Son clases que implementan la interfaz IEntityTypeConfiguration<TEntity> que permiten configurar una entidad con relación a la creación que se debe realizar en la base de datos al aplicar la migración (Tipos, Indicar si permite valores nulo o no, longitudes máximas, índices entre otras).

Estas clases deben ser creadas en la librería donde se encuentra el contexto de base de datos de su proyecto. Continuando con el ejemplo se crearan las siguientes clases de configuración en la librería CodeDesignPlus.EfCore.Sample.Api.SqlServer

  • CategoryEntityConfiguration
using CodeDesignPlus.EFCore.Extensions;
using CodeDesignPlus.EFCore.Sample.Api.Entities;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;

namespace CodeDesignPlus.EfCore.Sample.Api.SqlServer.EntityConfiguration
{
    public class CategoryEntityConfiguration : IEntityTypeConfiguration<Category>
    {
        public void Configure(EntityTypeBuilder<Category> builder)
        {
            builder.ConfigurationBase<long, string, Category>();

            builder.ToTable("Categories");
            builder.Property(x => x.Name).HasColumnType("varchar(64)").IsRequired();
            builder.Property(x => x.Description).HasColumnType("varchar(254)").IsRequired();

            builder.Property(x => x.IdUserCreator).IsRequired(false);
        }
    }
}
  • ProductEntityConfiguration
using CodeDesignPlus.EFCore.Extensions;
using CodeDesignPlus.EFCore.Sample.Api.Entities;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;

namespace CodeDesignPlus.EfCore.Sample.Api.SqlServer.EntityConfiguration
{
    public class ProductEntityConfiguration : IEntityTypeConfiguration<Product>
    {
        public void Configure(EntityTypeBuilder<Product> builder)
        {
            builder.ConfigurationBase<long, string, Product>();

            builder.ToTable("Products");
            builder.Property(x => x.Name).HasColumnType("varchar(64)").IsRequired();
            builder.Property(x => x.Description).HasColumnType("varchar(254)").IsRequired();
            builder.Property(x => x.Price).HasColumnType("numeric(18,2)").IsRequired();
            builder.Property(x => x.IdUserCreator).IsRequired(false);

            builder.HasOne(x => x.Category).WithMany(x => x.Products).HasForeignKey(x => x.IdCategory).OnDelete(DeleteBehavior.Cascade);
        }
    }
}

Donaciones

Si deseas apoyarnos económicamente lo puedes hacer a partir de:

Badges

Las siguientes insignias te muestran el estado del proyecto en su última versión:

Build status
Bugs
Code Smells
Coverage
Duplicated Lines (%)
Lines of Code
Maintainability Rating
Quality Gate Status
Reliability Rating
Technical Debt
Vulnerabilities
Security Rating

Clone this wiki locally