含める/除外する型Including & Excluding Types

種類を含むにモデルを EF がに関するメタデータを持つ入力し、読み取りし、書き込みデータベースのインスタンスを試みます。Including a type in the model means that EF has metadata about that type and will attempt to read and write instances from/to the database.

規約Conventions

慣例により、型で公開されているDbSetプロパティのコンテキストで、モデルに含まれます。By convention, types that are exposed in DbSet properties on your context are included in your model. さらに記載されている型、OnModelCreatingメソッドも含まれています。In addition, types that are mentioned in the OnModelCreating method are also included. 最後に、検出された型のナビゲーション プロパティの調査を再帰的にある任意の型は、モデルにも含まれます。Finally, any types that are found by recursively exploring the navigation properties of discovered types are also included in the model.

たとえば、次のコード リストですべての 3 種類が検出されます。For example, in the following code listing all three types are discovered:

  • Blog 公開されているため、DbSetコンテキストのプロパティBlog because it is exposed in a DbSet property on the context

  • Post 使用して検出されたため、Blog.Postsナビゲーション プロパティPost because it is discovered via the Blog.Posts navigation property

  • AuditEntry 指定されているため、 OnModelCreatingAuditEntry because it is mentioned 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; }
}

データの注釈Data Annotations

データ注釈を使用して、モデルから型を除外することができます。You can use Data Annotations to exclude a type from the model.

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

    public BlogMetadata Metadata { get; set; }
}

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

Fluent APIFluent API

Fluent API を使用して、モデルから型を除外することができます。You can use the Fluent API to exclude a type from the model.

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Ignore<BlogMetadata>();
    }
}

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

    public BlogMetadata Metadata { get; set; }
}

public class BlogMetadata
{
    public DateTime LoadedFromDatabase { get; set; }
}