You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 10:42:07