Ако разбирам правилно, Състояние
е просто базов клас, а не основен обект участва в наследяване на база данни.
В такъв случай е важно никога да не се позовавате на Статус
клас директно в модела и конфигурацията на обекта, т.е. без DbSet
, няма свойства за навигация от тип Състояние
или ICollection<Състояние>код> , без
modelBuilder.Entity
повиквания и без IEntityTypeConfiguration
.
Вместо това винаги трябва да се позовавате на конкретните типове, наследени от Status
. За да използвате повторно конфигурационен код, трябва да използвате ограничен общ методи или класове и да предават конкретните типове обекти.
Тъй като използвате IEntityTypeConfiguration
класове, вероятно най-естественото е да направите своя StatusConfiguration
генеричен клас:
public class StatusConfiguration<TEntity> : IEntityTypeConfiguration<TEntity>
where TEntity : Status
{
public virtual void Configure(EntityTypeBuilder<TEntity> builder)
{
builder.Property(c => c.updateUserName).IsRequired().HasMaxLength(50);
}
}
и нека извлечените класове за конфигурация на обекти произлизат от него:
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);
}
}