能否在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
相关产品推荐
相关产品推荐

