在实体框架中组合类型表和表继承

本文关键字:继承 类型 组合 实体 框架 | 更新日期: 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 继承的方式。