Om jag förstår det rätt visas Status
är bara en basklass och inte en basenhet deltar i Databas Arv.
I sådana fall är det viktigt att aldrig hänvisa till Status
klass direkt inuti enhetsmodell och konfiguration, dvs ingen DbSet<Status>
, inga navigeringsegenskaper av typen Status
eller ICollection<Status>
, ingen modelBuilder.Entity<Status>()
anrop och ingen IEntityTypeConfiguration<Status>
.
Istället måste du alltid hänvisa till de konkreta typerna som ärver från Status
. För att återanvända konfigurationskoden bör du använda begränsad generisk metoder eller klasser och klarar de konkreta entitetstyperna.
Eftersom du använder IEntityTypeConfiguration
klasser, förmodligen är det mest naturliga att göra din StatusConfiguration
klass generisk:
public class StatusConfiguration<TEntity> : IEntityTypeConfiguration<TEntity>
where TEntity : Status
{
public virtual void Configure(EntityTypeBuilder<TEntity> builder)
{
builder.Property(c => c.updateUserName).IsRequired().HasMaxLength(50);
}
}
och låt härledda entitetskonfigurationsklasser härledas från det:
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);
}
}