Jeśli dobrze rozumiem, Status
to tylko klasa bazowa, a nie podstawowa jednostka udział w dziedziczeniu baz danych.
W takim przypadku ważne jest, aby nigdy nie odnosić się do Status
klasa bezpośrednio w modelu encji i konfiguracji, tj. bez DbSet<Status>
, brak właściwości nawigacji typu Status
lub ICollection<Status>
, nie modelBuilder.Entity<Status>()
wywołania i brak IEntityTypeConfiguration<Status>
.
Zamiast tego zawsze musisz odwoływać się do konkretnych typów dziedziczących po Status
. Aby ponownie użyć kodu konfiguracyjnego, powinieneś użyć ograniczonego ogólnego metody lub klasy i przekazać konkretne typy jednostek.
Ponieważ używasz IEntityTypeConfiguration
klas, prawdopodobnie najbardziej naturalnym jest utworzenie StatusConfiguration
klasa ogólna:
public class StatusConfiguration<TEntity> : IEntityTypeConfiguration<TEntity>
where TEntity : Status
{
public virtual void Configure(EntityTypeBuilder<TEntity> builder)
{
builder.Property(c => c.updateUserName).IsRequired().HasMaxLength(50);
}
}
i niech pochodne klasy konfiguracji encji będą z niego wywodzić:
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);
}
}