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

C# 实体框架更改生成的多对多表的名称,c#,sql,.net,entity-framework,datatable,C#,Sql,.net,Entity Framework,Datatable,我有一个问题,为多对多关系生成的表不是我想要的。有没有办法告诉EntityFramework这个表的名称?这个解决方案是有效的,我只是对它如何命名这个表感到恼火 我的数据库集 public DbSet<Book> Books { get; set; } public DbSet<BookCategory> BookCategories { get; set; } 公共数据库集书籍{get;set;} 公共数据库集图书类别{get;set;} 我的模型 模型/Book.

我有一个问题,为多对多关系生成的表不是我想要的。有没有办法告诉EntityFramework这个表的名称?这个解决方案是有效的,我只是对它如何命名这个表感到恼火

我的数据库集

public DbSet<Book> Books { get; set; }
public DbSet<BookCategory> BookCategories { get; set; }
公共数据库集书籍{get;set;}
公共数据库集图书类别{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; }
}
教材
{
[关键]
公共int Id{get;set;}
公共字符串标题{get;set;}
公共字符串作者{get;set;}
公共整数价格{get;set;}
公共整数金额{get;set;}
public int BookCategoryId{get;set;}
公共列表图书类别{get;set;}
}
Models/BookCategory.cs

class BookCategory
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Book> Books { get; set; }
}
类图书分类
{
[关键]
公共int Id{get;set;}
公共字符串名称{get;set;}
公共列表书籍{get;set;}
}
表在SQL Server Express中的外观:

因此,我想将最终命名为“BookCategory”的表更改为更相关的表,我该如何处理这个问题呢?:)

编辑

对不起,我的意思是这是一种多对多的关系,而不是一对多的关系。我希望表的名称类似于“BookCategoryId”。

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

因此,在您的
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"));
    }
}

内部类MyContext:DbContext
{
公共MyContext(DbContextOptions)
:基本(选项)
{
}
公共数据库集书籍{get;set;}
公共DbSet标记{get;set;}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
建模者
.实体()
.HasMany(b=>b.BookCategories)
.WithMany(bc=>bc.Book)
.UsingEntity(j=>j.ToTable(“您的客户名称”);
}
}

您想好名字了吗?请记住,任何定制都会招致维护开销,所以只需考虑它是否真的值得这么做,您可能希望这是一对多对多的关系。由您决定是否希望在类模型中使用显式连接类。哦,对了!我的错!这是一种多对多的关系!我把那两个人搞混了。我可能希望这张桌子被称为“图书分类”之类的东西,我想非常感谢!这解决了我的问题!不客气