在实体框架中组合类型表和表继承
本文关键字:继承 类型 组合 实体 框架 | 更新日期: 2024-10-26 03:27:17
假设我有一个表+类A
,另一个表+类AType
代表不同类型的A
,以及一个从A
继承的表+类B
。
B
是某种类型的A
,但它太复杂了,无法在数据级别与其他类型的A
相适应,并且需要在模式级别拥有自己的表 - 当然,它有自己的类。
B
仍然是一种A
,所以我想在AType
中有一个代表B
的记录,以及A
记录中归档的type
实际上B
指向该记录AType
。我还希望能够添加更多继承自A
的表+类,并对其PK进行硬编码。
现在,如果我直接使用 SQL,我会为A
的继承者制作记录,并将负值作为他们的 PK。这样,在数据级别添加的具有正 PK 的新AType
永远不会与硬编码的模式级别记录冲突,并且作为一个不错的奖励,我可以轻松分辨A
中的哪些记录是硬类型,哪些是软类型 - 无需查看AType
。
我是实体框架的新手,所以我不想在尝试传统方式之前应用黑客风格的解决方案。那么在实体框架中解决这个问题的约定是什么?
如果你想遵循你奇怪的方法,你必须手动处理键值 - 你将获得与SQL相同的结果,但它很容易出错(特别是由于并发性)。它也不会生成您期望的良好 SQL,因为 EF 不会理解隐藏在键值中的逻辑,因此即使您尝试仅查询 A
,它也会联接所有派生表以查找哪些记录实际上只是A
- 这就是 EF 处理 TPT 继承的方式。