Si j'ai bien compris, le Status
est juste une classe de base et non une entité de base participant à l'héritage de base de données.
Dans ce cas, il est important de ne jamais se référer à Status
classe directement dans le modèle d'entité et la configuration, c'est-à-dire pas de DbSet<Status>
, aucune propriété de navigation de type Status
ou ICollection<Status>
, pas de modelBuilder.Entity<Status>()
appels et aucun IEntityTypeConfiguration<Status>
.
Au lieu de cela, vous devez toujours vous référer aux types concrets héritant du Status
. Afin de réutiliser le code de configuration, vous devez utiliser le générique contraint méthodes ou classes et transmettre les types d'entités concrètes.
Puisque vous utilisez IEntityTypeConfiguration
classes, probablement la plus naturelle est de faire votre StatusConfiguration
classe générique :
public class StatusConfiguration<TEntity> : IEntityTypeConfiguration<TEntity>
where TEntity : Status
{
public virtual void Configure(EntityTypeBuilder<TEntity> builder)
{
builder.Property(c => c.updateUserName).IsRequired().HasMaxLength(50);
}
}
et laissez les classes de configuration d'entités dérivées en dériver :
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);
}
}