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

Entity Framework类继承时提示Invalid column name 'Discriminator'错误如何解决

你遇到的问题是Entity Framework默认采用**TPH(每层结构一个表)**的继承映射策略导致的,默认情况下EF会将存在继承关系的多个实体类映射到同一张数据库表,通过额外的Discriminator字段区分实体类型,因此你访问主表TimeMaster时,EF会尝试关联派生类BTimeMaster的映射逻辑,出现冲突报错。

你不需要给BTimeMaster加[NotMapped]标记,采用以下两种方案任选其一即可:

  • 方案一(更适配你分Context的场景):在主表对应的TimetableContext的OnModelCreating方法中,显式忽略派生类BTimeMaster的映射,代码如下:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    // 主库上下文不需要感知备份实体的存在
    modelBuilder.Ignore<BTimeMaster>();
}

这个方案不会影响备份库BackupContext对BTimeMaster的映射逻辑,AcademicYear字段的映射关系可以完全保留,两边的访问逻辑都能正常运行。

  • 方案二(显式指定表映射):分别给两个实体类添加[Table]特性,显式指定各自映射的数据库表,告诉EF采用TPT(每个类型一个表)的映射策略:
// 主实体类添加
[Table("TimeMaster")]
public class TimeMaster  
{
    public string parameter1 { get; set; }
    public string parameter2{ get; set; }
    public string parameter3 { get; set; }
}

// 备份实体类添加
[Table("BTimeMaster")]
public class BTimeMaster : TimeMaster
{
    [Required(ErrorMessage = "Required!")]
    [DisplayName("AcademicYear")]
    public string AcademicYear { get; set; }
}

这样EF会将两个类分别映射到独立的两张表,不会出现映射冲突。

内容的提问来源于stack exchange,提问作者User

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:06:05