在代码优先的EF6数据库中启用了自动迁移,我发现我有4个类:Formula,FormulaStep,Preparation,PreparationStep,但只有3个表:Formulas,FormulaSteps,Preparations。
我对此非常不满意,因为恕我直言,PreparationSteps应该与FormulaSteps完全不同。意识到这是一个有效的应用程序,有一个简单的方法来改变它吗?要强制创建PreparationSteps表,每行都有一个对作为其模板的FormulaSteps行的引用?
我显然不想删除任何数据(在数据库中),也不想破坏应用程序,除了使用它构建数据库之外,它可能会以某种方式依赖于这种干扰。
PS 1:这里的公式是一个真实世界的计划。 准备是该计划的实例化。它代表了现实世界的事物。
PS 2:类标题是:
{{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
语句之前)移动数据。