1

假设我有一个表+类A,另一个表+类AType表示不同类型的A,以及从A继承的表+类B在实体框架中合并类型表和表继承

B是某种类型的A,但它太复杂了,无法在数据级别与其他类型的A相匹配,并且需要在模式级别拥有它自己的表格 - 并且它是自己的类别。

B仍然是一个类型的A,所以我想在AType创纪录的代表B,并申请在A记录,实际上是B s到指向纪录ATypetype。我也希望能够添加更多从A继承的表格+类,并且使它们的PK具有硬编码。

现在,如果我直接使用SQL,我会为A的继承者创造记录,并将负值作为他们的PK。这样一来,在数据层面增加了新的AType,它们具有肯定的PK,决不会与硬编码的模式层次相冲突,作为一个很好的奖励,我可以很容易地判断A中的哪些记录是硬类型,哪些是柔软的类型 - 无需看AType

我是新来的实体框架,所以我不想在我尝试传统方式之前应用黑客风格的解决方案。那么在Entity Framework中处理这个问题的约定是什么?

+0

如果你有3种不同的类型,你会怎么做? – podiluska 2012-08-07 14:34:48

+0

@podiluska:什么是负数不是“A”记录的PK - 它是AType记录的'PK'(当然还有'A'记录中的'type'字段)。所以,如果我有3种不同的硬性类型,我可以给他们PK'-1','-2'和'-3'。我拥有硬式PK的全部负面范围 - 我可以拥有尽可能多的数量。 – 2012-08-07 14:40:29

+0

类型表是否包含数据或元数据或两者的混合? – 2012-08-08 10:47:57

回答

0

如果您想遵循您奇怪的方法,您必须手动处理键值 - 您将获得与SQL中相同的结果,但它会非常容易出错(特别是由于并发性)。它也不会产生你期望的漂亮的SQL,因为EF不会理解隐藏在关键值中的逻辑,所以即使你试图查询A,它也会加入所有派生表,以查找哪些记录实际上只是A - 这就是EF处理TPT继承。

+0

我知道解决方案是骇人听闻的 - 我描述它来帮助描述问题。如果有更传统的方式来做我所需要的,那就更好了。 – 2012-08-07 18:58:35