Si entiendo correctamente, el Status
es solo una clase base y no una entidad base participando en la herencia de la base de datos.
En tal caso, es importante no referirse nunca a Status
class directamente dentro del modelo de entidad y la configuración, es decir, sin DbSet<Status>
, sin propiedades de navegación de tipo Status
o ICollection<Status>
, sin modelBuilder.Entity<Status>()
llamadas y no IEntityTypeConfiguration<Status>
.
En su lugar, siempre debe hacer referencia a los tipos concretos heredados del Status
. Para reutilizar el código de configuración, debe usar genérico restringido métodos o clases y pasar los tipos de entidades concretas.
Dado que está utilizando IEntityTypeConfiguration
clases, probablemente lo más natural es hacer su StatusConfiguration
clase genérica:
public class StatusConfiguration<TEntity> : IEntityTypeConfiguration<TEntity>
where TEntity : Status
{
public virtual void Configure(EntityTypeBuilder<TEntity> builder)
{
builder.Property(c => c.updateUserName).IsRequired().HasMaxLength(50);
}
}
y dejar que las clases de configuración de entidades derivadas se deriven de él:
public class ItemConfiguration : StatusConfiguration<Item>
{
public override void Configure(EntityTypeBuilder<Item> builder)
{
base.Configure(builder); // <--
builder.ToTable("Item", "dbo").HasKey(c => c.Id);
builder.Property(c => c.Description).IsRequired().HasMaxLength(100);
}
}