EntitätstypenEntity Types

Das Einschließen eines dbsets eines Typs in den Kontext bedeutet, dass es in EF Core Modell enthalten ist. Normalerweise wird ein solcher Typ als Entität bezeichnet.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 können Entitäts Instanzen aus der Datenbank lesen und in diese schreiben. Wenn Sie eine relationale Datenbank verwenden, können EF Core Tabellen für Ihre Entitäten über Migrationen erstellen.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.

Einschließen von Typen im ModellIncluding types in the model

Gemäß der Konvention sind Typen, die in dbset-Eigenschaften für den Kontext verfügbar gemacht werden, im Modell als Entitäten enthalten.By convention, types that are exposed in DbSet properties on your context are included in the model as entities. In der-Methode angegebene Entitäts Typen OnModelCreating werden ebenfalls eingeschlossen, ebenso wie alle Typen, die gefunden werden, indem die Navigations Eigenschaften anderer ermittelter Entitäts Typen rekursiv untersucht werden.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.

Im folgenden Codebeispiel sind alle Typen enthalten:In the code sample below, all types are included:

  • Blog ist enthalten, da es in einer dbset-Eigenschaft für den Kontext verfügbar gemacht wird.Blog is included because it's exposed in a DbSet property on the context.
  • Post ist enthalten, da Sie über die- Blog.Posts Navigations Eigenschaft erkannt wird.Post is included because it's discovered via the Blog.Posts navigation property.
  • AuditEntry Da es in angegeben wird 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; }
}

Ausschließen von Typen aus dem ModellExcluding types from the model

Wenn Sie nicht möchten, dass ein Typ im Modell enthalten ist, können Sie ihn ausschließen: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; }
}

Ausschließen von MigrationenExcluding from migrations

Hinweis

Die Möglichkeit, Tabellen aus Migrationen auszuschließen, wurde in EF Core 5,0 eingeführt.The ability to exclude tables from migrations was introduced in EF Core 5.0.

Es ist manchmal hilfreich, den gleichen Entitätstyp in mehreren Typen zugeordnet zu haben DbContext .It is sometimes useful to have the same entity type mapped in multiple DbContext types. Dies trifft vor allem dann zu, wenn begrenzte Kontexteverwendet werden, für die es üblich ist, DbContext für jeden Kontext Kontext einen anderen Typ zu verwenden.This is especially true when using bounded contexts, for which it is common to have a different DbContext type for each bounded context.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<IdentityUser>()
        .ToTable("AspNetUsers", t => t.ExcludeFromMigrations());
}

Bei dieser Konfigurations Migration wird die Tabelle nicht erstellt AspNetUsers , Sie IdentityUser ist jedoch noch im Modell enthalten und kann normal verwendet werden.With this configuration migrations will not create the AspNetUsers table, but IdentityUser is still included in the model and can be used normally.

Wenn Sie erneut mit der Verwaltung der Tabelle beginnen müssen, sollte eine neue Migration erstellt werden, bei der AspNetUsers nicht ausgeschlossen ist.If you need to start managing the table using migrations again then a new migration should be created where AspNetUsers is not excluded. Die nächste Migration enthält jetzt alle Änderungen, die an der Tabelle vorgenommen werden.The next migration will now contain any changes made to the table.

TabellennameTable name

Gemäß der Konvention wird jeder Entitätstyp so eingerichtet, dass er einer Datenbanktabelle mit dem gleichen Namen wie die dbset-Eigenschaft zugeordnet wird, die die Entität verfügbar macht.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. Wenn kein dbset für die angegebene Entität vorhanden ist, wird der Klassenname verwendet.If no DbSet exists for the given entity, the class name is used.

Sie können den Tabellennamen manuell konfigurieren:You can manually configure the table name:

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