📜  在多对多中重命名连接表 - C# (1)

📅  最后修改于: 2023-12-03 15:37:41.635000             🧑  作者: Mango

在多对多中重命名连接表 - C#

在 EF Core 中,多对多关系你可以使用 Fluent API 来配置。如果你不指定连接表的名字,EF 将使用默认的 schema 名称(通常是模型的名称,如果使用了复数形式,则是它的复数形式),并使用以下名称组合:第一个表的名称、下划线和第二个表的名称。例如,如果我们有 BlogTag 表,那么连接表的名称将会是 BlogTag

你可以通过 Fluent API 的 HasMany()WithMany() 方法来为多对多关系命名连接表。下面是一个示例:

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }

    public ICollection<BlogTag> BlogTags { get; set; }
}

public class Tag
{
    public int TagId { get; set; }
    public string Name { get; set; }

    public ICollection<BlogTag> BlogTags { get; set; }
}

public class BlogTag
{
    public int BlogId { get; set; }
    public int TagId { get; set; }

    public Blog Blog { get; set; }
    public Tag Tag { get; set; }
}

public class BlogContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Tag> Tags { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<BlogTag>().HasKey(bt => new { bt.BlogId, bt.TagId });

        modelBuilder.Entity<BlogTag>()
            .HasOne(bt => bt.Blog)
            .WithMany(b => b.BlogTags)
            .HasForeignKey(bt => bt.BlogId);

        modelBuilder.Entity<BlogTag>()
            .HasOne(bt => bt.Tag)
            .WithMany(t => t.BlogTags)
            .HasForeignKey(bt => bt.TagId);

        modelBuilder.Entity<BlogTag>()
            .ToTable("BlogTag");
    }
}

在上面的示例中,我们使用 ToTable() 方法来为连接表命名,它的参数就是我们想要使用的连接表的名称。在这里,我们将连接表命名为 BlogTag

这就是如何在 EF Core 中为多对多关系命名连接表的。希望这篇文章对你有帮助。