通过类型继承,我们可以更弹性地处理数据,有3中相关的技巧,即TPH,TPT,TPC。
Table Per Hierarchy(TPH)
当单个数据表存储不同数据类型时,在数据模型的设计上,可以使用Table Per Hierarchy(TPH,每个层次结构一张表)设计分割成数个不同的类型。在通过继承来建立彼此的关系。
新建一个空的控制台项目:TPHDemo。添加如下几个实体类:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public int Price { get; set; }
}
public class Magazine:Product
{
public int Year { get; set; }
public int Month { get; set; }
public string ISSN { get; set; }
public int MPages { get; set; }
}
public class Book:Product
{
public string Title { get; set; }
public string ISBN { get; set; }
public string Author { get; set; }
public int Pages { get; set; }
}
上下文类代码如下图所示:
public class TPHModel : DbContext
{
public TPHModel()
: base("name=TPHModel")
{
}
public virtual DbSet<Product> Product { get; set; }
}
运行项目生成数据库中的表结构如下图所示:
这个数据表存储各种类型的商品,我们可以将其中的数据字段分割成3部分,以针对特定的数据进行存储。分别是一般性商品的共同数据、图书、杂志。结构如下图所示:
字段名 | 说明 | 数据类型 | |
一般性商品的共同数据 | Id | 商品识别编号 | int |
Name | 商品名称 | string | |
Price | 价格 | int | |
图书 | Title | 书名 | string |
ISBN | 图书ISBN编码 | string | |
Author | 作者 | string | |
Pages | 页数 | int | |
杂志 | Years | 杂志年份 | int |
Month | 杂志月份 | int | |
ISSN | 杂志ISSN编码 | string | |
MPages | 杂志页数 | int |
现在向Main函数中加入代码,目的是向数据库中插入数据:
static void Main(string[] args)
{
using (TPHModel db = new TPHModel())