每种类型的表

此方法将在数据库上生成(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 的主键和约束

好处

  • 规范化表格
  • 易于添加列和子类
  • 没有可空列

缺点

  • 需要加入才能检索数据
  • 子类推断更昂贵