假设有abcd继承类:a抽象类,b继承a,c继承a,d继承c
ef的继承分3种:tph、tpt、tpc;
tph不考虑了,因为一个继承体系一个表的字段都要可为空成行;
tpt的话就是要每个类(含抽象类)都要一个表对应,a表里面存了所有的数据,如果是要查询b或d那没有问题,ef生成的sql是inner join还可以接受,但是如果要查询c的话,就不爽了,ef生成的sql是left outer join d,也就是会把子类给left join进来,就是这个问题太纠结了,不知道有什么方法,注意,如果是查询子类都是没有问题的
tpc也就是没有a类对应的表,bcd对应的表都是独立的,就是很多字的都是重复的,一般数据库都是怎么设计的(设计数据库的人一般不会用oo那种继承的设计,性能问题),这种在映射的时候需要调用this.Map(t => t.MapInheritedProperties());也就是强者tpc,否则的话是tpt的,当然tpc很多人说不推荐使用,具体什么原因不知道,如果这个时候查询c的话,ef会生成union all查询,类似tpt的left join,可能是因为ef不知道查询那些子类吧
以上2个问题,tpt的left join问题,tpc的union all问题,不知道大家有什么好的方案
个人觉得应该把d继承c改成继承a,也就是cd平级,这样查询c就没有子类了,但是这个解决不了根本的问题,大型项目还是会很多继承的
个人感觉继承会有问题,全部用关联保险