HerançaInheritance

Herança no modelo do EF é usada para controlar como a herança em classes de entidade é representada no banco de dados.Inheritance in the EF model is used to control how inheritance in the entity classes is represented in the database.

ConvençõesConventions

Por convenção, é responsabilidade do provedor de banco de dados para determinar como herança será representada no banco de dados.By convention, it is up to the database provider to determine how inheritance will be represented in the database. Ver herança (banco de dados relacional) de como isso é tratado com um provedor de banco de dados relacional.See Inheritance (Relational Database) for how this is handled with a relational database provider.

EF só irá configurar a herança se dois ou mais tipos herdados estão explicitamente incluídos no modelo.EF will only setup inheritance if two or more inherited types are explicitly included in the model. O EF não examinará para tipos de base ou derivados caso contrário, não foram incluídos no modelo.EF will not scan for base or derived types that were not otherwise included in the model. Você pode incluir tipos no modelo, expondo um DbSet para cada tipo na hierarquia de herança.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; }
}

Se você não quiser expor uma DbSet para uma ou mais entidades na hierarquia, você pode usar a API Fluent para garantir que eles são incluídos no modelo.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. E se você não confie em convenções, você pode especificar o tipo base explicitamente usando 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>();
    }
}

Observação

Você pode usar .HasBaseType((Type)null) para remover um tipo de entidade da hierarquia.You can use .HasBaseType((Type)null) to remove an entity type from the hierarchy.

Anotações de dadosData Annotations

É possível usar as anotações de dados para configurar a herança.You cannot use Data Annotations to configure inheritance.

API fluenteFluent API

A API Fluent para herança depende do provedor de banco de dados que você está usando.The Fluent API for inheritance depends on the database provider you are using. Ver herança (banco de dados relacional) para a configuração que você pode executar para um provedor de banco de dados relacional.See Inheritance (Relational Database) for the configuration you can perform for a relational database provider.