强制实体框架在实体从另一个实体继承时为2个实体制作2个表?

时间:2018-01-04 15:44:36

标签: entity-framework inheritance

在代码优先的EF6数据库中启用了自动迁移,我发现我有4个类:Formula,FormulaStep,Preparation,PreparationStep,但只有3个表:Formulas,FormulaSteps,Preparations。

我对此非常不满意,因为恕我直言,PreparationSteps应该与FormulaSteps完全不同。意识到这是一个有效的应用程序,有一个简单的方法来改变它吗?要强制创建PreparationSteps表,每行都有一个对作为其模板的FormulaSteps行的引用?

我显然不想删除任何数据(在数据库中),也不想破坏应用程序,除了使用它构建数据库之外,它可能会以某种方式依赖于这种干扰。

PS 1:这里的公式是一个真实世界的计划。       准备是该计划的实例化。它代表了现实世界的事物。

PS 2:类标题是:

{{1}}

1 个答案:

答案 0 :(得分:0)

您可能想要设置Table per Concrete Type映射。

您可以通过告诉ModelBuilder它应该存储您的继承实体的表来实现此目的。

ModelBuilder.Entity<FormulaStep>().ToTable("FormulaSteps");
ModelBuilder.Entity<PreparationStep>().ToTable("PreparationSteps");

然后添加一本手册migration,它应该支持新表&#34; PreparationSteps&#34;自动。将额外的SQL添加到此迁移中以移动具有discriminator值的所有行&#34; PreparationStep&#34;到新表。也许脚手架迁移会从#S; FormulaSteps&#34;中删除一些列。不再需要它们,因此请确保在删除数据之前(即迁移中的任何DropColumn语句之前)移动数据。