为何Entity Framework未生成OrgProperty与SystemProperty表却生成Property表?
问题原因分析
这是因为EF Core默认采用**TPH(每个层次结构一张表)**的继承映射策略,会将整个继承体系的所有实体类型都存储在同一个表中,而非为每个子类单独创建表。
具体细节:
- 当实体类存在继承关系时,EF Core默认会把父类
Property和所有子类OrgProperty、SystemProperty的数据统一存入父类对应的Property表中。 - 该表会自动生成一个名为
Discriminator的鉴别器列,用来区分不同的实体类型:比如存储OrgProperty数据时,该列值为OrgProperty;存储SystemProperty数据时,值为SystemProperty。 - 你的代码中没有显式配置其他继承映射策略,因此EF Core自动使用了默认的TPH,所以不会生成
OrgProperties和SystemProperties这两个单独的表。
若需为子类单独生成表的配置方法
如果希望为每个实体类型单独创建表(即TPT:每个类型一张表),可以通过Fluent API在DbContext的OnModelCreating方法中显式配置:
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Property>().ToTable("Properties"); modelBuilder.Entity<OrgProperty>().ToTable("OrgProperties"); modelBuilder.Entity<SystemProperty>().ToTable("SystemProperties"); }
内容的提问来源于stack exchange,提问作者David Thielen
相关产品推荐
相关产品推荐

