首页 新闻 搜索 专区 学院

【求解】EF codefirst 继承问题

0
悬赏园豆:30 [待解决问题]

假设有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就没有子类了,但是这个解决不了根本的问题,大型项目还是会很多继承的

lawbc的主页 lawbc | 初学一级 | 园豆:63
提问于:2014-07-30 11:26
< >
分享
所有回答(1)
0

个人感觉继承会有问题,全部用关联保险

刘宏玺 | 园豆:14006 (专家六级) | 2014-07-30 16:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册