之前因项目需求 利用EF做了个TPC的例子。 A基类 B C D全部继承自A。
我又建立一个一个类O 这个类与A基类是一对多关系。
具体业务就是 服务基类(A) 具体服务(B) 具体服务(C) 具体服务(D) 服务委托单(包含多条服务基本信息作为明细)
编写ABCD时OK 能够通过查询A 获取到BCD表中基本信息的数据。 但当我创建O并编写 O与A的关系时
迁移时系统报错
The association 'A_O' between entity types 'A' and 'O' is invalid. In a TPC hierarchy independent associations are only allowed on the most derived types.
必应翻译是 实体类型 'A' 和 'O' 之间的关联 'A_O' 是无效的。在 TPC 层次结构独立协会只允许派生程度最大的类型。
-----------------------------------------------------------------------------------------------------------------------
我还需要额外配置什么东西么? 或者说TPC不支持基类的这种关系?
补充说明 本人以一样的表关系 做了TPH和TPT的例子 在进行迁移时并未出现错误提示。
------解决思路----------------------
EF 不是一个合格的 ORM(当然它也并没有宣称自己是一个 ORM),它并不支持查询结果的多态机制。
一个合格的 ORM,如果你在实体类型中引用此类属性,例如
public class O
{
public A[] childrens;
.....
}
的时候,所查询出来的一个O对象,其 O.Childrens 里边可以有 B、C、D等等各种具体的实例,其查询时是支持多态的。特别是,你用不着事先声明,假设你在系统“将来的”升级版本中又增加了C的子类E和D的字类F,那么查询出来的O对象的childrens也就自动支持E和F实体了。