Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Entity Framework Core 2.0 :comment configurer une fois la classe de base abstraite

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);
    }
}