Se ho capito bene, lo Status
è solo una classe base e non un'entità di base partecipare all'ereditarietà del database.
In tal caso è importante non fare mai riferimento a Status
classe direttamente all'interno del modello di entità e della configurazione, ovvero no DbSet<Status>
, nessuna proprietà di navigazione di tipo Status
o ICollection<Status>
, no modelBuilder.Entity<Status>()
chiamate e nessun IEntityTypeConfiguration<Status>
.
Invece, devi sempre fare riferimento ai tipi concreti che ereditano dallo Status
. Per riutilizzare il codice di configurazione, dovresti utilizzare generico vincolato metodi o classi e passare i tipi di entità concrete.
Poiché stai usando IEntityTypeConfiguration
classi, probabilmente la cosa più naturale è creare la tua StatusConfiguration
classe generica:
public class StatusConfiguration<TEntity> : IEntityTypeConfiguration<TEntity>
where TEntity : Status
{
public virtual void Configure(EntityTypeBuilder<TEntity> builder)
{
builder.Property(c => c.updateUserName).IsRequired().HasMaxLength(50);
}
}
e lascia che le classi di configurazione dell'entità derivata ne derivi:
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);
}
}