使用 fluent api EF Core 5 的多对多关系

dim*_*ath 2 c# entity-framework-core entity-framework-core-5

我想我有两个具有多对多关系的实体,我将使用 fluent api 来解决这种关系

public class Author
{
    public int AuthorId { get; set; }
    public string Name { get; set; }
    public ICollection<Book> Books { get; set; }
}

public class Book
{
    public int BookId { get; set; }
    public string Title { get; set; }
    public ICollection<Author> Authors { get; set; }
}

protected override void OnModelCreating(ModelBuilder modelBuilder)
{  
   //Book
    modelBuilder.Entity<Book>().HasKey(x => x.BookId);
    modelBuilder.Entity<Book>().Property(x => x.Title).IsRequired();

    //Author
    modelBuilder.Entity<Author>().HasKey(x => x.AuthorId);
    modelBuilder.Entity<Author>().Property(x => x.Name).IsRequired();

    //many to many relationship
    modelBuilder.Entity<Book>()
                .HasMany(x => x.Authors)
                .WithMany(x => x.Books);
}
Run Code Online (Sandbox Code Playgroud)

使用 ef core 5,我们不需要创建新实体。问题出在我的数据库中,现在我有一个带有名称的表

作者书

有两列

AuthorsAuthorId 和 BooksBookId。

如何更改新表的名称和两列的名称?也是解决这种关系的正确方法吗?

modelBuilder.Entity<Book>()
                    .HasMany(x => x.Authors)
                    .WithMany(x => x.Books);
Run Code Online (Sandbox Code Playgroud)

Yon*_*oss 5

可以通过UsingEntity以下方式更改多对多表名和外键列:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{  
   //Book
    modelBuilder.Entity<Book>().HasKey(x => x.BookId);
    modelBuilder.Entity<Book>().Property(x => x.Title).IsRequired();

    //Author
    modelBuilder.Entity<Author>().HasKey(x => x.AuthorId);
    modelBuilder.Entity<Author>().Property(x => x.Name).IsRequired();

     modelBuilder.Entity<Book>().HasMany(
            x => x.Authors).WithMany(x => x.Books).
            UsingEntity<Dictionary<string, object>>(
                "M2MTable",
                b => b.HasOne<Author>().WithMany().HasForeignKey("AuthorId"),
                b => b.HasOne<Book>().WithMany().HasForeignKey("BookId"));
}
Run Code Online (Sandbox Code Playgroud)

结果: 数据库数据

它在Entity Framework Community Standup - August 19th 2020 - Many-to-Many in EF Core 5.0上有所描述