本章节讲解EF里的继承映射关系,分为TPH、TPT、TPC。具体:
1.TPH:Table Per Hierarchy
这是EF的默认的继承映射关系:一张表存放基类和子类的所有列,自动生成的discriminator列用来区分基类和子类的数据。新建一个度假村Resort实体类试试:
/// <summary>
/// 度假村类
/// </summary>
public class Resort : Lodging //这里继承了Lodging类
{
public string Entertainment { get; set; } //娱乐
public string Activities { get; set; } //活动
}
之前的住宿类Lodging里有个属性IsResort表示是否度假胜地,现在可以注释掉了,有新的类Resort来继承Lodging表示是否是度假胜地了,跑下程序最终会生成一张表:
并没有生成Resorts表,而是把Resrot实体类里的属性生成到了Lodgings表里。多了一列discriminator,这个是默认的,用来表示数据来自哪个类,继续添加一个插入Lodging表数据的方法:
private static void InsertLodging()
{
var lodging = new CodeFirst.Model.Lodging
{
Name = "Rainy Day Motel",
Destination = new CodeFirst.Model.Destination
{
Name = "Seattle, Washington",
Country = "USA"
}
};
using (var context = new CodeFirst.DataAccess.BreakAwayContext())
{
context.Lodgings.Add(lodging);
context.SaveChanges();
}
}
再添加一个插入Resort表数据的方法:
private static void InsertResort()
{
var resort = new CodeFirst.Model.Resort
{
Name = "Top Notch Resort and Spa",
MilesFromNearestAirport = ,
Activities = "Spa, Hiking, Skiing, Ballooning",
Destination = new CodeFirst.Model.Destination
{
Name = "Stowe, Vermont",
Country = "USA"
}
};
using (var context = new CodeFirst.DataAccess.BreakAwayContext())
{
context.Lodgings.Add(resort);
context.SaveChanges();
}
}
在Main方法里调用两个插入方法,可得到如下数据:
两个插入的数据都到了一张表里。Discriminator列表示数据来自哪一列。当然是可以配置的,这里就必须使用Fluent API配置了,Data Annotation表示无能为力,到LodgingMap里进行配置:
this.Map<CodeFirst.Model.Lodging>(l => { l.Requires("From").HasValue("Standard"); });
this.Map<CodeFirst.Model.Resort>(l => { l.Requires("From").HasValue("Resort"); });
生成了我们指定的From列,数据Standard、Resort分别表示来自Lodging和Resrot表,形象点就是1号酒店是普通酒店,2号就是是度假胜地的酒店:
当然,这里甚至可以把HasValue方法里的参数设置成True和False,用布尔类型的数据区分普通酒店和度假胜地的酒店更形象,园友lk8167给了一个更形象的普通售货员和销售经理的例子
2.TPT:Table Per Type
父类和子类在不同的表里。使用Data Annotation配置TPT:
[Table("Resorts")]
public class Resort : Lodging
{
public string Entertainment { get; set; }
public string Activities { get; set; }
}
或者使用Fluent API配置:
this.Map(m =>
{
m.ToTable("Lodgings");
}).Map<CodeFirst.Model.Resort>(m =>
{
m.ToTable("Resorts");
});
注意:上面配置TPH的Fluetn API需要注释掉在跑程序,那是测试TPH的配置。同时释放这句的注释:context.Database.Initialize(true);,这里没修改实体,但是也需要重新生成数据库。最终数据库是这样的:
父类和子类实体都有一张表,子表通过主键LodgingId找到父表:
3.TPC:Table Per Concrete Type
为每个子类建立一个表,每个与子类对应的表中包含基类的属性对应的列和子类特有属性对应的列。同样之前配置TPT的Fluent API需要先注释掉,然后我们通过Fluent API配置下TPC,TPC也无法用Data Annotation配置:
this.Map(m =>
{
m.ToTable("Lodgings");
}).Map<CodeFirst.Model.Resort>(m =>
{
m.ToTable("Resorts");
m.MapInheritedProperties();
});
生成的数据库:
aaarticlea/png;base64,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" alt="" />
可见,子类Resorts类也有了基类的所有属性。
注意:为了方便测试生成TPC,我注释了所有Lodging表的导航属性,主要是和Destination的一对多关系、Destination类也需要注释掉Lodging属性和Fluent API关系配置,否则程序跑起来会报DataException错:
An exception occurred while initializing the database. See the InnerException for details.
大家下载demo使用的时候也需要先注释掉Lodging类的导航属性。当然不注释想保留也可以,必须设置外键为可空类型,具体请参考Programming Entity Framework: Code First 第五章 Avoiding Mapping Exceptions with TPC
讲了这几种方式配置继承映射,实际项目中应该用哪个呢?
- 不推荐使用TPC(Type Per Concrete Type),因为在TPC方式中子类中包含的其他类的实例或实例集合不能被映射为表之间的关系。你必须通过手动地在类中添加依赖类的主键属性,从而让 Code First感知到它们之间的关系,而这种方式是和使用Code First的初衷相反的;
- 从查询性能上来说,TPH会好一些,因为所有的数据都存在一个表中,不需要在数据查询时使用join;
- 从存储空间上来说,TPT会好一些,因为使用TPH时所有的列都在一个表中,而表中的记录不可能使用所有的列,于是有很多列的值是null,浪费了很多存储空间;
- 从数据验证的角度来说,TPT好一些,因为TPH中很多子类属性对应的列是可为空的,就为数据验证增加了复杂性。
本系列文章结束,主要讲解了EF里如何使用Code First的方式配置数据库,基本上都是手写的配置,其实大家可能已经想到会有工具可以自动配置这些关系了,对了,就是EF Power Tools。这个工具相当智能,可以直接配置出所有的关系。不过个人还是建议关系不多的话自己手写Fluent API来配置。
另外,前面配置了那么长时间的一对多、多对多等各种关系。配置好了如何用EF对这些数据进行增查改查呢?后续还会有系列文章讲解EF是如何操作数据库的,请保持关注。
EF里的继承映射关系TPH、TPT和TPC的讲解以及一些具体的例子的更多相关文章
-
entity framework里的继承映射关系TPH、TPT和TPC
本章节讲解EF里的继承映射关系,分为TPH.TPT.TPC.具体: 1.TPH:Table Per Hierarchy 这是EF的默认的继承映射关系:一张表存放基类和子类的所有列,自动生成的discr ...
-
EF——继承映射关系TPH、TPT和TPC的讲解以及一些具体的例子 05 (转)
EF里的继承映射关系TPH.TPT和TPC的讲解以及一些具体的例子 本章节讲解EF里的继承映射关系,分为TPH.TPT.TPC.具体: 1.TPH:Table Per Hierarchy 这是EF ...
-
继承映射关系 TPH、TPT、TPC<;EntityFramework6.0>;
每个类型一张表[TPT] 声明方式 public class Business { [Key] public int BusinessId { get; protected set; } public ...
-
EF里的默认映射以及如何使用Data Annotations和Fluent API配置数据库的映射
I.EF里的默认映射 上篇文章演示的通过定义实体类就可以自动生成数据库,并且EF自动设置了数据库的主键.外键以及表名和字段的类型等,这就是EF里的默认映射.具体分为: 数据库映射:Code First ...
-
hibernate 继承映射关系( SINGLE_TABLE)
三种继承映射关系. 1,SINGLE_TABLE person student teacher 在一个表中,student和teacher继承自person,通过一个Discriminato ...
-
hibernate笔记--继承映射关系的三种实现方式
单表继承映射(一张表): 假设我们现在有三个类,关系如下: Person类有两个子类Student和Teacher,并且子类都具有自己独有的属性.这种实体关系在hibernate中可以使用单表的继承映 ...
-
继承映射关系 joinedsubclass的查询
会出现下面这样的错一般是配置文件中的mapping和映射文件中的package路径或者class中的name路径不一致 org.hibernate.MappingException: Unknown ...
-
继承映射关系 subclass的查询
Person大类的映射文件配置 1 <hibernate-mapping package="com.zh.hibernate.subclass"> <class ...
-
hibernate 继承映射关系( JOINED)
一个主表,其他的表每个都有自己的表来装填自己特有的部分,共同的部分就放在主表中. package com.bjsxt.hibernate; import javax.persistence.Ent ...
随机推荐
-
pedestal-工作记
1.基于bootstrap-v3和flat-ui-v3为第十届外语活动月写了个页面 http://www.pedestal.cn/static/activity/index.html 2.资料 boo ...
-
CDOJ 482 Charitable Exchange bfs
Charitable Exchange Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/s ...
-
R语言︱机器学习模型评估方案(以随机森林算法为例)
笔者寄语:本文中大多内容来自<数据挖掘之道>,本文为读书笔记.在刚刚接触机器学习的时候,觉得在监督学习之后,做一个混淆矩阵就已经足够,但是完整的机器学习解决方案并不会如此草率.需要完整的评 ...
-
Android 的自动化测试资源
环境预备阶段: win7下jdk+eclipse android应用开发环境建立 android genymotion模拟器怎么使用以及和google提供的模拟器性能对比
-
学习Ant Design Pro的一点心得
1.控制反转(Inversion of Control)是一种「思想」,依赖注入(Dependency Injection)则是这一思想的一种具体「实现方式」 2.react 要注意全局 id相同 3 ...
-
浅谈分布式消息技术 Kafka(转)
一只神秘的程序猿. Kafka的基本介绍 Kafka是最初由Linkedin公司开发,是一个分布式.分区的.多副本的.多订阅者,基于zookeeper协调的分布式日志系统(也可以当做MQ系统),常见可 ...
-
kafka的简单理解
经典组合: Flume+Kafka+Storm+HDFS/HBase Flume:分布式采集 Kafka:分布式缓存 Kafka简介: 一种分布式的.基于发布/订阅的消息系统(Scala编写的) Ka ...
-
winform上控件的拖拽小结
这里罗列出几个相关的事件和属性,具体的实现介绍已有非常优秀的文章了,文章末尾我将会给出,大家可以去参考. 属性: AllowDrop: 目标控件必须设定为true,才能接受拖拽来的东西. 事件: It ...
-
numpy.argsort详解
numpy.argsort(a, axis=-1, kind='quicksort', order=None)[source] Returns the indices that would sort ...
-
【Java面试题】32 ArrayList和Vector的区别
1. Vector & ArrayList 相同点: 1.ArrayList和Vector都是继承了相同的父类和实现了相同的接口 2.底层都是数组实现的 3.初始默认长度都为10. 不同点: ...