継承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.