原文:http://www.entityframeworktutorial.net/code-first/inheritance-strategy-in-code-first.aspx
我们在之前的部分看到,EF为每个具体的领域类创建数据库表。然而,你可以使用继承来设计域类。
面向对象技术包括“has a”和“is a”关系,而基于SQL的关系模型在表之间只有一个“has a”关系。 SQL数据库管理系统不支持类型继承。那么,将如何使用关系数据库映射面向对象的领域类?
以下是在Code-First中代表继承层次结构的三种不同的方法:
1.Table per Hierarchy (TPH):此方法为整个类继承层次结构提供一个表。表包括区分继承类的标识符列。这是Entity Framework中的默认继承映射策略。
//简单理解:基类和子类都创建在一张表里,通过某个标识字段区分
2.Table per Type (TPT):此方法建议为每个类提供单独的表。
//简单理解:基类和子类分别创建表,公共字段在主表,子表只有自己的字段。子表通过主键找到主表
3.Table per Concrete class (TPC):此方法为一个具体的类提供了一个表,但不是抽象类。因此,如果您在多个具体类中继承抽象类,那么抽象类的属性将是具体类的每个表的一部分。
//简单理解:子类分别创建表,子表包含基类的所有字段
我们在这里不详细介绍,详细信息可参考:EF里的继承映射关系TPH、TPT和TPC的讲解以及一些具体的例子