TPH层级切换鉴别器生成空迁移,如何防止旧数据损坏?
TPH层次结构切换默认鉴别器的迁移修复方案
EF Core在你移除自定义鉴别器配置后,不会自动生成数据更新的迁移代码,这就是为什么Up/Down方法为空的原因。要避免旧数据损坏,你需要手动修改迁移文件,补上鉴别器值的更新逻辑:
- 打开刚生成的空迁移文件,在
Up方法中添加SQL更新语句,把旧的自定义鉴别器值替换成EF Core默认生成的新值:protected override void Up(MigrationBuilder migrationBuilder) { // 替换成你的表名、旧鉴别器值和默认新值 migrationBuilder.Sql("UPDATE [YourBaseTable] SET [Discriminator] = 'YourDerivedEntityName' WHERE [Discriminator] = 'CustomValue'"); } - 为了支持回滚,在
Down方法中添加反向更新语句:protected override void Down(MigrationBuilder migrationBuilder) { migrationBuilder.Sql("UPDATE [YourBaseTable] SET [Discriminator] = 'CustomValue' WHERE [Discriminator] = 'YourDerivedEntityName'"); } - 提前确认
ContextModelSnapshot里的默认鉴别器值是什么(EF Core默认用实体类的名称作为值),确保SQL语句里的新值和快照一致。 - 执行迁移前务必备份数据库,防止操作失误导致数据问题。
内容的提问来源于stack exchange,提问作者Yoda
相关产品推荐
相关产品推荐

