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

能否在Entity Framework中使用现有可为空列作为鉴别器?

解决EF Core TPH模式下null鉴别器的“Data is null error”问题
  • 先修正列的可空性配置:报错大概率是因为EF Core默认会把鉴别器列标记为非空,但实际表中该列存在null值,导致读取数据时类型转换失败。需要在tableBase的实体配置里显式将该列设为可空:

    builder.Property(e => e.ExistinColumn).IsRequired(false);
    
  • 你原有的鉴别器映射逻辑本身是正确的,保留即可:

    tableBase
         .HasDiscriminator<string>(nameof(tableBase.ExistinColumn))
         .HasValue<Child1>(null)
         .HasValue<Child2>("string1")
         .HasValue<Child2>("string2")
         .HasValue<Child2>("string3");
    

    这个配置完全匹配你的业务场景:null对应Child1,其余三个值对应Child2,不需要新建鉴别器列,也不会影响遗留系统的正常使用。

  • 额外排查点:如果调整后仍报错,可以检查EF Core版本(部分旧版本对null鉴别器的支持有瑕疵,建议升级到稳定新版本),或者确认数据库中该列的类型是否和实体属性类型一致(比如均为string类型)。

内容的提问来源于stack exchange,提问作者kostas.kapasakis

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 23:47:08