継承Inheritance

EF モデルでの継承を使用すると、データベース内のエンティティ クラスの継承の表現方法を制御します。Inheritance in the EF model is used to control how inheritance in the entity classes is represented in the database.

規則Conventions

慣例により、データベースでの継承の表現方法を決定する、データベース プロバイダーの責任です。By convention, it is up to the database provider to determine how inheritance will be represented in the database. 参照してください(リレーショナル データベース) の継承のリレーショナル データベース プロバイダーで処理する方法です。See Inheritance (Relational Database) for how this is handled with a relational database provider.

モデルで、2 つまたは複数の継承された型が明示的に含まれている場合、EF は継承設定のみです。EF will only setup inheritance if two or more inherited types are explicitly included in the model. EF は基本データ型または派生型それ以外の場合、モデルに含まれていないことをスキャンしません。EF will not scan for base or derived types that were not otherwise included in the model. 公開することで、モデル内の型を含めることができます、 DbSet 継承階層の種類ごとにします。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; }
}

公開するたくない場合、 DbSet 階層内の 1 つまたは複数のエンティティ、モデルに含まれていることを確認する Fluent API を使用することができます。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. 規則に依存しないようにする場合は、明示的に使用して、基本型を指定できますと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>();
    }
}

注意

使用することができます.HasBaseType((Type)null)階層からエンティティの種類を削除します。You can use .HasBaseType((Type)null) to remove an entity type from the hierarchy.

データの注釈Data Annotations

データ注釈を使用して、継承を構成することはできません。You cannot use Data Annotations to configure inheritance.

Fluent APIFluent API

継承の Fluent API を使用しているデータベース プロバイダーによって異なります。The Fluent API for inheritance depends on the database provider you are using. 参照してください(リレーショナル データベース) の継承のリレーショナル データベース プロバイダーに対して実行できる構成します。See Inheritance (Relational Database) for the configuration you can perform for a relational database provider.