实体框架更改生成的多对多表的名称

Posted

技术标签:

【中文标题】实体框架更改生成的多对多表的名称【英文标题】:Entity Framework change name of generated many to many table 【发布时间】:2021-06-12 12:12:20 【问题描述】:

我有一个问题,即为多对多关系生成的表不是我想要的。有没有办法告诉 Entity Framework 给这个表起什么名字?该解决方案有效,我只是对它选择此表的命名方式感到恼火。

我的数据库集

public DbSet<Book> Books  get; set; 
public DbSet<BookCategory> BookCategories  get; set; 

我的模型

模型/Book.cs

class Book

    [Key]
    public int Id  get; set; 
    public string Title  get; set; 
    public string Author  get; set; 
    public int Price  get; set; 
    public int Amount  get; set; 
    public int BookCategoryId  get; set; 
    public List<BookCategory> BookCategories  get; set; 

模型/BookCategory.cs

class BookCategory

    [Key]
    public int Id  get; set; 
    public string Name  get; set; 
    public List<Book> Books  get; set; 

表在 SQL Server Express 中的外观:

所以我想将最终命名为“BookBookCategory”的表格更改为更相关的内容,我该如何处理? :)

编辑

对不起,我的意思是这是多对多的关系,而不是一对多的关系。我希望将表命名为“BookCategoryId”。

【问题讨论】:

你有名字吗?请记住,任何自定义都会产生维护开销,因此请考虑是否真的值得这样做 您可能希望这是一个多对多关系。由您决定是否要在类模型中使用 of 而没有显式连接类。 哦,对了!我的错!它是多对多的关系!我把这两个弄混了。我可能希望该表被称为“BookCategoryId”之类的名称 【参考方案1】:

您可以使用 Fluent API 中的 UsingEntity 来配置您的实体类型。

所以,在您的 OnModelCreating 中,您可以有这个:

internal class MyContext : DbContext

    public MyContext(DbContextOptions<MyContext> options)
        : base(options)
    
    

    public DbSet<Book> Books  get; set; 
    public DbSet<BookCategory> Tags  get; set; 

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    
        modelBuilder
            .Entity<Book>()
            .HasMany(b => b.BookCategories)
            .WithMany(bc => bc.Book)
            .UsingEntity(j => j.ToTable("YourCustomName"));
    


【讨论】:

以上是关于实体框架更改生成的多对多表的名称的主要内容,如果未能解决你的问题,请参考以下文章

填充具有访问权限的多对多表

更改生成的联接表的名称(多对多)-EF Core 5

实体框架6:多对多关系问题[关闭]

Hibernate 创建冗余的多对多表

使用 EF4 CTP4 代码优先方法生成的多对多表中的命名约定

实体框架中的多对多关系导致无限循环