Entity Framework 将生成的多对多更改名称 table

Entity Framework change name of generated many to many table

我有一个问题,为多对多关系生成的 table 不是我想要的。有没有办法告诉 Entity Framework 给这个 table 起什么名字?该解决方案有效,我只是对它如何选择命名这个 table.

感到恼火

我的数据库集

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

我的模型

Models/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; }
}

Models/BookCategory.cs

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

table 在 SQL Server Express 中的外观:

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

编辑

抱歉,我的意思是这是多对多关系,而不是一对多关系。我希望 table 被命名为类似“BookCategoryId”的名称。

您可以使用 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"));
    }
}