EntityFramework进阶——继承

本文介绍了EntityFramework中的三种继承策略:Table Per Hierarchy(TPH)、Table Per Type(TPT)和Table Per Concrete Class(TPC),详细讲解了它们在数据库表结构和数据存储上的实现方式,并通过实例展示了如何使用这些策略。此外,还提到了复杂类型的处理方法。
摘要由CSDN通过智能技术生成

通过类型继承,我们可以更弹性地处理数据,有3中相关的技巧,即TPHTPTTPC

 

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())
         
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值