Varlık TürleriEntity Types

Bağlam üzerindeki bir DbSet türü de dahil olmak, EF Core modeline dahil olduğu anlamına gelir; genellikle varlıkolarak böyle bir türe başvurduk.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, ve veritabanından varlık örnekleri okuyup yazabilir ve ilişkisel bir veritabanı kullanıyorsanız, geçişler aracılığıyla varlıklarınız için tablolar oluşturabilir 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.

Modeldeki türleri eklemeIncluding types in the model

Kurala göre, bağlamdaki DbSet özelliklerinde sunulan türler, modele varlık olarak dahil edilir.By convention, types that are exposed in DbSet properties on your context are included in the model as entities. OnModelCreating yönteminde belirtilen varlık türleri, diğer keşfedilen varlık türlerinin gezinti özelliklerini yinelemeli olarak inceleyerek bulunan her türlü tür olduğu gibi da dahil edilmiştir.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.

Aşağıdaki kod örneğinde, tüm türler dahil edilmiştir:In the code sample below, all types are included:

  • Blog, bağlamdaki bir DbSet özelliğinde kullanıma sunulduğundan dahil edilir.Blog is included because it's exposed in a DbSet property on the context.
  • Post, Blog.Posts gezinti özelliği aracılığıyla bulunduğundan dahil edilir.Post is included because it's discovered via the Blog.Posts navigation property.
  • OnModelCreatingbelirtildiğinden AuditEntry.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; }
}

Modeldeki türler dışlanıyorExcluding types from the model

Modele bir türün dahil edilmesini istemiyorsanız, bu tür dışında bırakabilirsiniz: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; }
}

Tablo adıTable name

Kural gereği, her varlık türü, varlığı sunan DbSet özelliğiyle aynı ada sahip bir veritabanı tablosuna eşlenecek şekilde ayarlanır.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. Belirtilen varlık için hiçbir DbSet yoksa, sınıf adı kullanılır.If no DbSet exists for the given entity, the class name is used.

Tablo adını el ile yapılandırabilirsiniz:You can manually configure the table name:

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

Tablo şemasıTable schema

İlişkisel bir veritabanı kullanılırken, tablolar veritabanınızın varsayılan şemasında oluşturulan kurala göre yapılır.When using a relational database, tables are by convention created in your database's default schema. Örneğin, Microsoft SQL Server dbo şemasını kullanır (SQLite şemaları desteklemez).For example, Microsoft SQL Server will use the dbo schema (SQLite does not support schemas).

Belirli bir şemada oluşturulacak tabloları aşağıdaki gibi yapılandırabilirsiniz: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; }
}

Her tablo için şema belirtmek yerine, Fluent API model düzeyinde varsayılan şemayı de tanımlayabilirsiniz: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");
}

Varsayılan şemanın ayarlanması, diziler gibi diğer veritabanı nesnelerini de etkileyecek şekilde değişir.Note that setting the default schema will also affect other database objects, such as sequences.