实体框架6每个类型的表继承映射,为类型留下鉴别器值(未定义)

时间:2014-11-25 20:03:21

标签: entity-framework entity-framework-6

我有一个项目,我试图使用每种类型的表继承,源代码here

我从Transaction的抽象基类开始。有几个子类的交易,费用,存款,发放和Encumberance。生成的迁移是我所期望的;带有Discriminator列的Transactions表。

在尝试将Encumberance存储到数据库之前,所有内容似乎都按预期工作。它按预期使用事务表中的事务值和encumberances表中的其他值进行故事。但是Transactions表中的Discriminator值是(Undefined)。

我无法弄清楚如何正确设置。

1 个答案:

答案 0 :(得分:3)

经过几个小时的研究,我发现这对我来说是个误解。使用Entity Framework 6,有3种方法可以将继承链保存到数据库中。

  • 每个层次结构的表(TPH) - 所有数据都存储在单个表中,类型由鉴别器列区分。单个查询可用于获取所有类型。
  • 每类型表(TPT) - 数据存储在两个或多个表中,其中基类的公共属性位于主表中。查询将连接到表,然后联合以区分类型。不需要鉴别器列。
  • 每个具体类的表(TPC) - 所有数据都存储在每个类的单独表中。查询不需要连接,但仍需要多个查询。

在我的场景中,我有一个TPH和TPT混合使用,效果非常好。虽然任何看过它生成的模式的DBA都可能想要打我的脸。所以,最后我最终选择了TPH,直到我的交易变得不同,足以证明将所有这些交易转移到TPT。