Dziedziczenie (relacyjnej bazy danych)Inheritance (Relational Database)

Uwaga

Konfiguracja opisana w tej sekcji ma zastosowanie do relacyjnych baz danych w zasadzie.The configuration in this section is applicable to relational databases in general. Metody rozszerzenia pokazane staną się dostępne po zainstalowaniu dostawcy relacyjnej bazy danych (z powodu udostępnionego Microsoft.EntityFrameworkCore.Relational pakietu).The extension methods shown here will become available when you install a relational database provider (due to the shared Microsoft.EntityFrameworkCore.Relational package).

Dziedziczenie w modelu EF służy do kontrolowania sposobu dziedziczenia klas jednostek jest reprezentowana w bazie danych.Inheritance in the EF model is used to control how inheritance in the entity classes is represented in the database.

KonwencjeConventions

Według Konwencji dziedziczenia zostanie zamapowane przy użyciu wzorca tabeli na hierarchii (TPH).By convention, inheritance will be mapped using the table-per-hierarchy (TPH) pattern. TPH używa pojedynczej tabeli, aby przechowywać dane dla wszystkich typów w hierarchii.TPH uses a single table to store the data for all types in the hierarchy. Kolumna dyskryminatora służy do identyfikowania typu reprezentuje każdego wiersza.A discriminator column is used to identify which type each row represents.

EF tylko ustawienia dziedziczenia, jeśli dwa lub więcej dziedziczonych typów jawnie znajdują się w modelu (zobacz dziedziczenia więcej szczegółów).EF will only setup inheritance if two or more inherited types are explicitly included in the model (see Inheritance for more details).

Poniżej przedstawiono przykładowy scenariusz dziedziczenia proste i dane przechowywane w tabeli relacyjnej bazy danych za pomocą wzorca TPH.Below is an example showing a simple inheritance scenario and the data stored in a relational database table using the TPH pattern. Rozróżniacza kolumny identyfikuje typu blogu są przechowywane w każdym wierszu.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; }
}

obraz

Adnotacji danychData Annotations

Za pomocą adnotacji danych nie można skonfigurować dziedziczenia.You cannot use Data Annotations to configure inheritance.

Interfejsu API FluentFluent API

Aby skonfigurować nazwę i typ kolumny rozróżniacza i wartości, które są używane do identyfikowania poszczególnych typów w hierarchii, można użyć interfejsu API Fluent.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; }
}