在实体框架中合并类型表和表继承
假设我有一个表+类A
,另一个表+类AType
表示不同类型的A
,以及从A
继承的表+类B
。在实体框架中合并类型表和表继承
B
是某种类型的A
,但它太复杂了,无法在数据级别与其他类型的A
相匹配,并且需要在模式级别拥有它自己的表格 - 并且它是自己的类别。
B
仍然是一个类型的A
,所以我想在AType
创纪录的代表B
,并申请在A
记录,实际上是B
s到指向纪录AType
的type
。我也希望能够添加更多从A
继承的表格+类,并且使它们的PK具有硬编码。
现在,如果我直接使用SQL,我会为A
的继承者创造记录,并将负值作为他们的PK。这样一来,在数据层面增加了新的AType
,它们具有肯定的PK,决不会与硬编码的模式层次相冲突,作为一个很好的奖励,我可以很容易地判断A
中的哪些记录是硬类型,哪些是柔软的类型 - 无需看AType
。
我是新来的实体框架,所以我不想在我尝试传统方式之前应用黑客风格的解决方案。那么在Entity Framework中处理这个问题的约定是什么?
如果您想遵循您奇怪的方法,您必须手动处理键值 - 您将获得与SQL中相同的结果,但它会非常容易出错(特别是由于并发性)。它也不会产生你期望的漂亮的SQL,因为EF不会理解隐藏在关键值中的逻辑,所以即使你试图查询A
,它也会加入所有派生表,以查找哪些记录实际上只是A
- 这就是EF处理TPT继承。
我知道解决方案是骇人听闻的 - 我描述它来帮助描述问题。如果有更传统的方式来做我所需要的,那就更好了。 – 2012-08-07 18:58:35
如果你有3种不同的类型,你会怎么做? – podiluska 2012-08-07 14:34:48
@podiluska:什么是负数不是“A”记录的PK - 它是AType记录的'PK'(当然还有'A'记录中的'type'字段)。所以,如果我有3种不同的硬性类型,我可以给他们PK'-1','-2'和'-3'。我拥有硬式PK的全部负面范围 - 我可以拥有尽可能多的数量。 – 2012-08-07 14:40:29
类型表是否包含数据或元数据或两者的混合? – 2012-08-08 10:47:57