Incluindo e excluindo tiposIncluding & Excluding Types

Incluindo um tipo no significa modelo EF com metadados sobre que tipo e tenta ler e gravar instâncias do/para o banco de dados.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.

ConvençõesConventions

Por convenção, os tipos que são expostos no DbSet propriedades de seu contexto, estão incluídas em seu modelo.By convention, types that are exposed in DbSet properties on your context are included in your model. Além disso, os tipos mencionados o OnModelCreating método também estão incluídos.In addition, types that are mentioned in the OnModelCreating method are also included. Por fim, todos os tipos que são encontrados por recursivamente explorar as propriedades de navegação de tipos descobertos também estão incluídos no modelo.Finally, any types that are found by recursively exploring the navigation properties of discovered types are also included in the model.

Por exemplo, na listagem de código a seguir são descobertos todos os três tipos:For example, in the following code listing all three types are discovered:

  • Blogporque ela é exposta em um DbSet propriedade no contextoBlog because it is exposed in a DbSet property on the context

  • Postporque ele é descoberto por meio de Blog.Posts propriedade de navegaçãoPost because it is discovered via the Blog.Posts navigation property

  • AuditEntryporque ele é mencionado naOnModelCreatingAuditEntry 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; }
}

Anotações de dadosData Annotations

Você pode usar as anotações de dados para excluir um tipo de modelo.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; }
}

API fluenteFluent API

Você pode usar a API fluente para excluir um tipo de modelo.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; }
}