首页 > 解决方案 > 实体框架更改生成的多对多表的名称

问题描述

我有一个问题,即为多对多关系生成的表不是我想要的。有没有办法告诉 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”之类的名称。

标签: c#sql.netentity-frameworkdatatable

解决方案


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


推荐阅读