当前位置: 代码迷 >> .NET分析设计 >> EntityFramework TPC的使用疑点
  详细解决方案

EntityFramework TPC的使用疑点

热度:755   发布时间:2016-05-01 22:32:18.0
EntityFramework TPC的使用疑问

之前因项目需求 利用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实体了。