VererbungInheritance

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 ist es bis zu den Datenbankanbieter, um zu bestimmen, wie Vererbung in der Datenbank dargestellt wird.By convention, it is up to the database provider to determine how inheritance will be represented in the database. Finden Sie unter Vererbung (Relational Database) für wie dies mit einer relationalen Datenbank-Anbieter behandelt wird.See Inheritance (Relational Database) for how this is handled with a relational database provider.

EF richtet Vererbung nur, wenn mindestens zwei geerbte Typen explizit in das Modell enthalten sind.EF will only setup inheritance if two or more inherited types are explicitly included in the model. EF gesucht wird nicht für den Basistyp bzw. abgeleiteten Typen, die andernfalls nicht im Modell enthalten sind.EF will not scan for base or derived types that were not otherwise included in the model. Sie können Typen im Modell einschließen, indem verfügbar gemacht werden eine DbSet für jeden Typ in der Vererbungshierarchie.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; }
}

Wenn Sie verfügbar machen möchten, keine DbSet für eine oder mehrere Entitäten in der Hierarchie, können Sie die Fluent-API verwenden, um sicherzustellen, dass sie im Modell enthalten sind.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. Und wenn Sie auf die Konventionen basieren nicht können Sie angeben, dass den Basistyp explizit mit 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>();
    }
}

Hinweis

Sie können .HasBaseType((Type)null) ein Entitätstyps aus der Hierarchie entfernen.You can use .HasBaseType((Type)null) to remove an entity type from the hierarchy.

DatenanmerkungenData Annotations

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

Fluent-APIFluent API

Die Fluent-API für die Vererbung, hängt von den verwendeten Anbieter ab.The Fluent API for inheritance depends on the database provider you are using. Finden Sie unter Vererbung (Relational Database) für die Konfiguration, die Sie für einen Anbieter für die relationale Datenbank ausführen können.See Inheritance (Relational Database) for the configuration you can perform for a relational database provider.