エンティティ型Entity Types

型の DbSet をコンテキストに含めることは、それが EF Core のモデルに含まれることを意味します。通常、このような型は エンティティとして参照されます。Including a DbSet of a type on your context means that it is included in EF Core's model; we usually refer to such a type as an entity. EF Core は、データベースとの間でエンティティインスタンスの読み取りと書き込みを行うことができます。リレーショナルデータベースを使用している場合は、EF Core によって、移行によってエンティティのテーブルを作成できます。EF Core can read and write entity instances from/to the database, and if you're using a relational database, EF Core can create tables for your entities via migrations.

モデルに型を含めるIncluding types in the model

慣例により、コンテキストの DbSet プロパティで公開される型は、エンティティとしてモデルに含まれます。By convention, types that are exposed in DbSet properties on your context are included in the model as entities. メソッドに指定されているエンティティ型は OnModelCreating 、他の検出されたエンティティ型のナビゲーションプロパティを再帰的に調べることによって検出される型と同様にも含まれます。Entity types that are specified in the OnModelCreating method are also included, as are any types that are found by recursively exploring the navigation properties of other discovered entity types.

以下のコードサンプルでは、すべての型が含まれています。In the code sample below, all types are included:

  • Blog は、コンテキストの DbSet プロパティで公開されているため、含まれています。Blog is included because it's exposed in a DbSet property on the context.
  • Post は、ナビゲーションプロパティを使用して検出されるため、含まれてい Blog.Posts ます。Post is included because it's discovered via the Blog.Posts navigation property.
  • AuditEntry はで指定されているため OnModelCreating です。AuditEntry because it is specified in OnModelCreating.
class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<AuditEntry>();
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    public List<Post> Posts { get; set; }
}

public class Post
{
    public int PostId { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }

    public Blog Blog { get; set; }
}

public class AuditEntry
{
    public int AuditEntryId { get; set; }
    public string Username { get; set; }
    public string Action { get; set; }
}

モデルから型を除外するExcluding types from the model

モデルに型を含めない場合は、その型を除外することができます。If you don't want a type to be included in the model, you can exclude it:

[NotMapped]
public class BlogMetadata
{
    public DateTime LoadedFromDatabase { get; set; }
}

テーブル名Table name

慣例により、各エンティティ型は、エンティティを公開する DbSet プロパティと同じ名前のデータベーステーブルにマップされるように設定されます。By convention, each entity type will be set up to map to a database table with the same name as the DbSet property that exposes the entity. 指定されたエンティティに DbSet が存在しない場合は、クラス名が使用されます。If no DbSet exists for the given entity, the class name is used.

テーブル名は手動で構成できます。You can manually configure the table name:

[Table("blogs")]
public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

テーブル スキーマTable schema

リレーショナルデータベースを使用する場合、テーブルはデータベースの既定のスキーマで作成されます。When using a relational database, tables are by convention created in your database's default schema. たとえば、Microsoft SQL Server はスキーマを使用し dbo ます (SQLite はスキーマをサポートしていません)。For example, Microsoft SQL Server will use the dbo schema (SQLite does not support schemas).

次のように、特定のスキーマで作成されるテーブルを構成できます。You can configure tables to be created in a specific schema as follows:

[Table("blogs", Schema = "blogging")]
public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

各テーブルのスキーマを指定するのではなく、fluent API を使用してモデルレベルで既定のスキーマを定義することもできます。Rather than specifying the schema for each table, you can also define the default schema at the model level with the fluent API:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.HasDefaultSchema("blogging");
}

既定のスキーマを設定すると、シーケンスなどの他のデータベースオブジェクトも影響を受けることに注意してください。Note that setting the default schema will also affect other database objects, such as sequences.