sql >> Database teknologi >  >> RDS >> Sqlserver

Entity Framework Core 2.0:Sådan konfigureres abstrakt basisklasse én gang

Hvis jeg forstår det korrekt, vises Status er kun en basisklasse og ikke en basis entitet deltager i Database Arv.

I sådanne tilfælde er det vigtigt aldrig at henvise til Status klasse direkte inde i enhedsmodel og konfiguration, dvs. ingen DbSet , ingen navigationsegenskaber af typen Status eller ICollection , ingen modelBuilder.Entity() opkald og ingen IEntityTypeConfiguration .

I stedet skal du altid henvise til de konkrete typer, der arver fra Status . For at genbruge konfigurationskoden skal du bruge begrænset generisk metoder eller klasser og bestå de konkrete enhedstyper.

Da du bruger IEntityTypeConfiguration klasser, nok det mest naturlige er at lave din Statuskonfiguration klasse 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);
    }
}

og lad afledte enhedskonfigurationsklasser afledes fra 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. UNIX_TIMESTAMP i SQL Server

  2. Eksisterer / findes ikke:'vælg 1' vs 'vælg felt'

  3. Sådan nulstiller du identitetskolonneværdi i SQL Server-tabel - SQL Server / T-SQL vejledning del 43

  4. hvordan man konfigurerer dvalekonfigurationsfil til sql-server