Wenn ich das richtig verstehe, der Status
ist nur eine Basisklasse und keine Basis-Entität Teilnahme an der Datenbankvererbung.
In einem solchen Fall ist es wichtig, sich niemals auf Status
zu beziehen Klasse direkt innerhalb des Entitätsmodells und der Konfiguration, d. h. kein DbSet<Status>
, keine Navigationseigenschaften vom Typ Status
oder ICollection<Status>
, kein modelBuilder.Entity<Status>()
Aufrufe und kein IEntityTypeConfiguration<Status>
.
Stattdessen müssen Sie immer auf die konkreten Typen verweisen, die vom Status
erben . Um Konfigurationscode wiederzuverwenden, sollten Sie eingeschränktes generisches verwenden Methoden oder Klassen und übergeben die konkreten Entitätstypen.
Da Sie IEntityTypeConfiguration
verwenden Klassen ist es wahrscheinlich am natürlichsten, Ihre StatusConfiguration
zu erstellen Klasse generisch:
public class StatusConfiguration<TEntity> : IEntityTypeConfiguration<TEntity>
where TEntity : Status
{
public virtual void Configure(EntityTypeBuilder<TEntity> builder)
{
builder.Property(c => c.updateUserName).IsRequired().HasMaxLength(50);
}
}
und davon abgeleitete Entitätskonfigurationsklassen ableiten lassen:
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);
}
}