sql >> Databáze >  >> RDS >> Sqlserver

Entity Framework Core 2.0:Jak jednou nakonfigurovat abstraktní základní třídu

Pokud tomu dobře rozumím, Status je pouze základní třída a nikoli základní entita účastnící se dědičnosti databáze.

V takovém případě je důležité nikdy neodkazovat na Status třída přímo v modelu entity a konfiguraci, tj. žádný DbSet<Status> , žádné navigační vlastnosti typu Status nebo ICollection<Status> , žádné modelBuilder.Entity<Status>() volání a žádná IEntityTypeConfiguration<Status> .

Místo toho musíte vždy odkazovat na konkrétní typy děděné z Status . Chcete-li znovu použít konfigurační kód, měli byste použít omezený obecný metody nebo třídy a předat konkrétní typy entit.

Protože používáte IEntityTypeConfiguration třídy, pravděpodobně nejpřirozenější je vytvořit si StatusConfiguration třída generic:

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

a nechat odvozené třídy konfigurace entit odvozovat se od něj:

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. Příklady MONTHNAME() – MySQL

  2. Trvale nastavit cestu schématu Postgresql

  3. PRAGMA table_list v SQLite

  4. Co je kurzor v oracle