Vererbung (relationale Datenbank)Inheritance (Relational Database)

Hinweis

Die Konfiguration in diesem Abschnitt ist im Allgemeinen gilt für relationale Datenbanken.The configuration in this section is applicable to relational databases in general. Die Erweiterungsmethoden, die hier gezeigten werden verfügbar, wenn Sie einen relationale Datenbank-Anbieter installieren (aufgrund der freigegebenen Microsoft.EntityFrameworkCore.Relational Paket).The extension methods shown here will become available when you install a relational database provider (due to the shared Microsoft.EntityFrameworkCore.Relational package).

Vererbung in der EF-Modell dient zum Steuern, wie Vererbung in Entitätsklassen in der Datenbank dargestellt wird.Inheritance in the EF model is used to control how inheritance in the entity classes is represented in the database.

KonventionenConventions

Gemäß der Konvention wird Vererbung mit dem Muster für die Tabelle pro Hierarchie (TPH) zugeordnet werden.By convention, inheritance will be mapped using the table-per-hierarchy (TPH) pattern. TPH verwendet eine einzelne Tabelle zum Speichern der Daten für alle Typen in der Hierarchie.TPH uses a single table to store the data for all types in the hierarchy. Eine Unterscheidungsspalte wird verwendet, um welche Art identifizieren jede Zeile stellt.A discriminator column is used to identify which type each row represents.

EF wird nur die Vererbung einrichten, wenn mindestens zwei geerbte Typen explizit in das Modell eingeschlossen sind (finden Sie unter Vererbung Weitere Details).EF will only setup inheritance if two or more inherited types are explicitly included in the model (see Inheritance for more details).

Im folgenden Beispiel wird eine einfache Vererbungsszenario und die Daten in einer relationalen Datenbanktabelle TPH Muster gespeichert.Below is an example showing a simple inheritance scenario and the data stored in a relational database table using the TPH pattern. Die Unterscheidungseigenschaft Spalte identifiziert, welche Art von Blog in jeder Zeile gespeichert wird.The Discriminator column identifies which type of Blog is stored in each row.

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<RssBlog> RssBlogs { get; set; }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

public class RssBlog : Blog
{
    public string RssUrl { get; set; }
}

Bild

DatenanmerkungenData Annotations

Sie können keine Datenanmerkungen verwenden, um Vererbung zu konfigurieren.You cannot use Data Annotations to configure inheritance.

Fluent-APIFluent API

Sie können die Fluent-API verwenden, so konfigurieren Sie den Namen und Typ der Diskriminatorspalte sowie die Werte, die verwendet werden, um jeden Typ in der Hierarchie zu identifizieren.You can use the Fluent API to configure the name and type of the discriminator column and the values that are used to identify each type in the hierarchy.

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .HasDiscriminator<string>("blog_type")
            .HasValue<Blog>("blog_base")
            .HasValue<RssBlog>("blog_rss");
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

public class RssBlog : Blog
{
    public string RssUrl { get; set; }
}