每種型別的表

此方法將在資料庫上生成(n + 1)個表以表示所有繼承結構,其中 n 是子類的數量。

如何:

public abstract class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime BirthDate { get; set; }
}

[Table("Employees")]
public class Employee : Person
{
    public DateTime AdmissionDate { get; set; }
    public string JobDescription { get; set; }
}

[Table("Customers")]
public class Customer : Person
{
    public DateTime LastPurchaseDate { get; set; }
    public int TotalVisits { get; set; }
}

// On DbContext
public DbSet<Person> People { get; set; }
public DbSet<Employee> Employees { get; set; }
public DbSet<Customer> Customers { get; set; }

生成的表格將是:

表:人員欄位:Id 名稱 BirthDate

表:員工欄位:PersonId AdmissionDate JobDescription

表:客戶:欄位:PersonId LastPurchaseDate TotalVisits

所有表中的’PersonId’將成為 People.Id 的主鍵和約束

好處

  • 規範化表格
  • 易於新增列和子類
  • 沒有可空列

缺點

  • 需要加入才能檢索資料
  • 子類推斷更昂貴