DziedziczenieInheritance

Dziedziczenie w modelu platformy EF jest używane do kontrolowania, jak 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 jest dostawca bazy danych, aby określić, jak dziedziczenie będzie reprezentowany w bazie danych.By convention, it is up to the database provider to determine how inheritance will be represented in the database. Zobacz dziedziczenie (relacyjna baza danych) dla jak jest to obsługiwane za pomocą dostawcy relacyjnej bazy danych.See Inheritance (Relational Database) for how this is handled with a relational database provider.

EF skonfiguruje tylko dziedziczenie, jeśli co najmniej dwa dziedziczone typy są jawnie uwzględnione w modelu.EF will only setup inheritance if two or more inherited types are explicitly included in the model. EF nie będzie skanować dla typów podstawowych i pochodnych, które w przeciwnym razie nie zostały uwzględnione w modelu.EF will not scan for base or derived types that were not otherwise included in the model. Mogą zawierać typy w modelu, zapewniając DbSet dla każdego typu w hierarchii dziedziczenia.You can include types in the model by exposing a DbSet for each type in the inheritance hierarchy.

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

Jeśli nie chcesz udostępnić DbSet dla co najmniej jednej jednostki w hierarchii można użyć Fluent API, aby upewnić się, że są one uwzględnione w modelu.If you don't want to expose a DbSet for one or more entities in the hierarchy, you can use the Fluent API to ensure they are included in the model. A jeśli użytkownik nie należy polegać na konwencjach można określić typ podstawowy, w sposób jawny przy użyciu HasBaseType.And if you don't rely on conventions you can specify the base type explicitly using HasBaseType.

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

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<RssBlog>().HasBaseType<Blog>();
    }
}

Uwaga

Możesz użyć .HasBaseType((Type)null) można usunąć typu jednostki z hierarchii.You can use .HasBaseType((Type)null) to remove an entity type from the hierarchy.

Adnotacje danychData Annotations

Nie można użyć adnotacji danych, aby skonfigurować dziedziczenie.You cannot use Data Annotations to configure inheritance.

Interfejs Fluent APIFluent API

Interfejs Fluent API dziedziczenia zależy od dostawcy bazy danych, którego używasz.The Fluent API for inheritance depends on the database provider you are using. Zobacz dziedziczenie (relacyjna baza danych) konfiguracji można wykonać dla dostawcy relacyjnej bazy danych.See Inheritance (Relational Database) for the configuration you can perform for a relational database provider.