【问题标题】:Entity Framework 6 Table-per-Type inheritance mapping leaving discriminator value (Undefined) for typeEntity Framework 6 Table-per-Type 继承映射为类型留下鉴别器值(未定义)
【发布时间】:2014-11-27 00:44:19
【问题描述】:
我有一个项目,我试图在每个类型继承中使用表,源代码here。
我从Transaction 的抽象基类开始。交易有几个子类,费用、存款、放款和抵押。生成的迁移是我所期望的;带有鉴别器列的事务表。
一切似乎都按预期工作,直到我尝试将Encumberance 存储到数据库中。它按预期使用事务表中的事务值和负担表中的其他值来记录它。但 Transactions 表中的 Discriminator 值为 (Undefined)。
我不知道如何正确设置。
【问题讨论】:
标签:
entity-framework
entity-framework-6
【解决方案1】:
经过几个小时的研究,我发现这是我的一个误解。在 Entity Framework 6 中,有 3 种方法可以将继承链持久化到数据库中。
-
Table per Hierarchy (TPH) - 所有数据都存储在一个表中,类型由鉴别器列区分。单个查询可用于获取所有类型。
-
每个类型的表 (TPT) - 数据存储在两个或多个表中,其中基类的公共属性位于主表中。查询连接到表,然后联合以区分类型。不需要鉴别器列。
-
每个具体类的表 (TPC) - 所有数据都存储在每个类的单独表中。查询不需要连接,但仍需要多个查询。
在我的场景中,我混合了 TPH 和 TPT,效果非常好。尽管任何查看它生成的模式的 DBA 都可能想打我的脸。所以,最后我暂时选择了 TPH,直到我的交易变得足够不同,足以证明将它们全部转移到 TPT 是合理的。