EF Code First TPH继承模式下如何将父表同列映射到不同子类字段
解决方法
这是TPH(表每层次结构)继承模式下的字段映射冲突问题,通过显式指定列名即可解决,可选两种配置方式:
- 方法1:使用数据注解
在SaleA和PropertyB两个类的CNumber属性上都添加Column特性,指定映射到同一个数据库列:
// SaleA类中 [Column("CNumber")] public string CNumber { get; set; } // PropertyB类中 [Column("CNumber")] public string CNumber { get; set; }
注意:两个类的
CNumber属性必须是相同数据类型,否则会出现映射错误。
- 方法2:使用Fluent API配置
在DbContext的OnModelCreating方法中统一配置映射规则:
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<SaleA>() .Property(s => s.CNumber) .HasColumnName("CNumber"); modelBuilder.Entity<PropertyB>() .Property(p => p.CNumber) .HasColumnName("CNumber"); }
配置完成后删除之前生成的错误迁移文件,重新运行Add-Migration生成新迁移,此时不会再新增PropertyB_CNumber列,两个类的CNumber值会统一存储到已有的CNumber列中。
内容的提问来源于stack exchange,提问作者Simran
相关产品推荐
相关产品推荐

