EF Core多对多关系映射的数据库表能否自定义命名?
实现方案
EF Core 5.0 及以上版本原生支持无需显式定义中间关联实体,直接自定义多对多中间表的名称,你需要的效果完全可以实现,操作步骤如下:
- 在你的
DbContext子类中重写OnModelCreating方法,通过 Fluent API 配置多对多关联的中间表规则即可:
protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<User>() // 配置User关联多个Role .HasMany(u => u.Roles) // 配置Role关联多个User .WithMany(r => r.Users) // 配置中间表名称 .UsingEntity(join => join.ToTable("UsersRoles", "Prefix")); }
- 如果你期望的
Prefix是数据库的独立架构名,上述写法即可生成全限定名为Prefix.UsersRoles的中间表 - 如果你期望的
Prefix只是表名的字符串前缀,直接修改为join.ToTable("Prefix.UsersRoles")即可
配置完成后执行新的数据库迁移,自动生成的中间表就会匹配你指定的命名规则。
注意:如果你使用的是 EF Core 3.x 及更早版本,该特性尚未支持,必须显式定义中间关联实体才能自定义表名。
内容的提问来源于stack exchange,提问作者Naveen
相关产品推荐
相关产品推荐

