sql >> Databasteknik >  >> RDS >> Sqlserver

Entity Framework Core 2.0:Hur man konfigurerar abstrakt basklass en gång

Om jag förstår det rätt visas Status är bara en basklass och inte en basenhet deltar i Databas Arv.

I sådana fall är det viktigt att aldrig hänvisa till Status klass direkt inuti enhetsmodell och konfiguration, dvs ingen DbSet<Status> , inga navigeringsegenskaper av typen Status eller ICollection<Status> , ingen modelBuilder.Entity<Status>() anrop och ingen IEntityTypeConfiguration<Status> .

Istället måste du alltid hänvisa till de konkreta typerna som ärver från Status . För att återanvända konfigurationskoden bör du använda begränsad generisk metoder eller klasser och klarar de konkreta entitetstyperna.

Eftersom du använder IEntityTypeConfiguration klasser, förmodligen är det mest naturliga att göra din StatusConfiguration klass generisk:

public class StatusConfiguration<TEntity> : IEntityTypeConfiguration<TEntity>
    where TEntity : Status
{
    public virtual void Configure(EntityTypeBuilder<TEntity> builder)
    {
        builder.Property(c => c.updateUserName).IsRequired().HasMaxLength(50);
    }
}

och låt härledda entitetskonfigurationsklasser härledas från det:

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



  1. Fel vid användning av oracle.dataaccess.dll

  2. Aktiverar tvåfaktorsautentisering för ScaleGrid DBaaS

  3. Jämför PHP-databasabstraktionslager och CRUD-plugins

  4. Syntetisk datagenerering