HéritageInheritance

L’héritage dans le modèle EF est utilisé pour contrôler la façon dont l’héritage dans les classes d’entité est représentée dans la base de données.Inheritance in the EF model is used to control how inheritance in the entity classes is represented in the database.

ConventionsConventions

Par convention, il incombe au fournisseur de base de données de déterminer comment l’héritage est représentée dans la base de données.By convention, it is up to the database provider to determine how inheritance will be represented in the database. Consultez l’héritage (base de données relationnelle) pour la gestion avec un fournisseur de base de données relationnelle.See Inheritance (Relational Database) for how this is handled with a relational database provider.

EF sera uniquement le programme d’installation d’héritage si deux ou plusieurs types hérités sont explicitement inclus dans le modèle.EF will only setup inheritance if two or more inherited types are explicitly included in the model. EF n’analyse pas pour les types de base ou dérivées qui ne figuraient pas dans le cas contraire dans le modèle.EF will not scan for base or derived types that were not otherwise included in the model. Vous pouvez inclure des types dans le modèle en exposant un DbSet pour chaque type dans la hiérarchie d’héritage.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; }
}

Si vous ne souhaitez pas exposer un DbSet pour une ou plusieurs entités dans la hiérarchie, vous pouvez utiliser l’API Fluent pour vous assurer qu’ils sont inclus dans le modèle.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. Et si vous ne vous fiez conventions, vous pouvez spécifier le type de base explicitement à l’aide de 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>();
    }
}

Note

Vous pouvez utiliser .HasBaseType((Type)null) pour supprimer un type d’entité à partir de la hiérarchie.You can use .HasBaseType((Type)null) to remove an entity type from the hierarchy.

Annotations de donnéesData Annotations

Vous ne pouvez pas utiliser des Annotations de données pour configurer l’héritage.You cannot use Data Annotations to configure inheritance.

API FluentFluent API

Le fournisseur de base de données que vous utilisez dépend de l’API Fluent d’héritage.The Fluent API for inheritance depends on the database provider you are using. Consultez l’héritage (base de données relationnelle) pour la configuration que vous pouvez effectuer pour un fournisseur de base de données relationnelle.See Inheritance (Relational Database) for the configuration you can perform for a relational database provider.