VererbungInheritance

Vererbung in das EF-Modell dient zum Steuern, wie die 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 der 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 (relationale Datenbank) 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 wird Vererbung nur eingerichtet, 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 wird für den Basistyp bzw. abgeleiteten Typen, die andernfalls nicht im Modell enthalten waren, nicht überprüft.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 machen 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 die 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 Konventionen basieren nicht können Sie angeben, dass den Basistyp ausdrücklich 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) auf einen Entitätstyp aus der Hierarchie zu entfernen.You can use .HasBaseType((Type)null) to remove an entity type from the hierarchy.

DatenanmerkungenData Annotations

Sie können nicht von Datenanmerkungen verwenden, die Vererbung konfigurieren.You cannot use Data Annotations to configure inheritance.

Fluent-APIFluent API

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