1. 程式人生 > 實用技巧 >3. 建立模型

3. 建立模型

概念: EF Core 可以從/向 資料庫中讀取和寫入實體例項,如果使用的是關係型資料庫,EF Core 可以通過遷移為實體建立表

在模型中包含型別

按照約定,在上下文中的DbSet屬性中公開的型別作為實體包含在模型中,還包含在OnModelCreating方法中指定的實體型別,就像通過遞迴方式瀏覽其它實現的實體型別的導航屬性找到的任何型別一樣。

在下面的程式碼示例中,包含了所有型別:

  • Blog 包含在內,因為它在上下文的 DbSet 屬性中公開。
  • 包含 Post 是因為它是通過 Blog.Posts 導航屬性發現的。
  • AuditEntry,因為它是在 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; }
}

表架構

使用關係資料庫時,表按約定在資料庫的預設架構中建立。 例如,Microsoft SQL Server 將使用 dbo 架構(SQLite 不支援架構)。

你可以配置要在特定架構中建立的表,如下所示:

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

//API 模式
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<Blog>()
        .ToTable("blogs", schema: "blogging");
}

您還可以在模型級別定義 Fluent API 的預設架構,而不是為每個表指定架構:

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

請注意,設定預設架構也會影響其他資料庫物件,如序列。