如何使用Fluent API配置两个TPH类型实体之间的关联关系?
完全可以在保留现有TPH配置的前提下,通过Fluent API显式声明这两类关联,同时还可以移除你不想要的循环引用。
配置说明
你需要的关联都是具体子类之间的关系,只需要针对具体实体子类配置映射即可,不会干扰基类的TPH鉴别器逻辑。
第一步:移除循环引用
直接删除MeetingRoomConfiguration类中的MeetingRooms导航属性即可,配置关系时可以显式声明无反向导航,不需要保留该属性。
第二步:添加Fluent API关系配置
在你原有TPH配置的基础上,追加以下配置代码:
// 配置MeetingRoom与MeetingRoomConfiguration的一对多关系 modelBuilder.Entity<MeetingRoom>() .HasMany<MeetingRoomConfiguration>(x => x.Configurations) .WithOne() // 无反向导航属性 .HasForeignKey("MeetingRoomId") // 可自定义外键列名 .OnDelete(DeleteBehavior.Cascade); // 按需调整级联删除规则 // 配置CoworkingRoom与CoworkingRoomConfiguration的一对一关系 modelBuilder.Entity<CoworkingRoom>() .HasOne<CoworkingRoomConfiguration>(x => x.Configuration) .WithOne() // 无反向导航属性 .HasForeignKey<CoworkingRoomConfiguration>("CoworkingRoomId") // 可自定义外键列名 .IsRequired(); // 按需设置是否为必填关联
配置完成后,EF Core会完全按照你显式声明的规则生成映射,不再依赖自动推断逻辑,同时原有TPH的鉴别器配置完全生效不受影响。
内容的提问来源于stack exchange,提问作者Nicolas Van Damme
相关产品推荐
相关产品推荐

