首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架核心5:配置多对多关系,如何指定外键名称

实体框架核心5:配置多对多关系,如何指定外键名称
EN

Stack Overflow用户
提问于 2021-05-08 20:42:33
回答 1查看 92关注 0票数 0

我有一个现有的SQL Server数据库,其中包含通过连接表Publications实现的多对多关系Books <-> Authors

代码语言:javascript
复制
CREATE TABLE [dbo].[Books]
(
    [BookId] INT IDENTITY,
    [Title] NVARCHAR(160) NOT NULL,
    ...
)

CREATE TABLE [dbo].[Authors]
(
    [AuthorId] INT IDENTITY,
    ...
)

CREATE TABLE [dbo].[Publications]
(
    [BookId] INT NOT NULL,
    [AuthorId] INT NOT NULL,

    CONSTRAINT [PK_Publication] PRIMARY KEY ([BookId], [AuthorId])
)

我需要在实体框架核心5中配置多对多关系。

在EF 6中,它相当简单:

代码语言:javascript
复制
protected override void OnModelCreating(DbModelBuilder mb)
{
    mb.Entity<Author>() // an Author
         .HasMany(a => a.Books) // has many Books
         .WithMany(b => b.Authors) // with many Authors
         .Map(mc =>
               {
                    mc.ToTable("Publications"); // Join table: Publications
                    mc.MapLeftKey("AuthorId"); // FK Author: AuthorId
                    mc.MapRightKey("BookId"); // FK Book : BookId
               });
}

但我对Entity Framework Core 5有问题:

代码语言:javascript
复制
protected override void OnModelCreating(ModelBuilder mb)
{
    mb.Entity<Author>() // an Author
          .HasMany(a => a.Books) // has many Books
          .WithMany(b => b.Authors) // with many Authors
          .UsingEntity(j => j.ToTable("Publications")); // join table: Publications
          // how to define foreign key columns?
}

我不知道如何映射外键列。EF核心5使用模式AuthorsAuthorIdBooksBookId

如何更改此命名约定?

谢谢你

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-09 02:13:10

如果多对多表在C#代码中不相关,您可以尝试这样做:

代码语言:javascript
复制
public class Author
{
   public int AuthorId { get; set; }
   public ICollection<Book> Books { get; set; }
}
public class Book
{
   public int BookId { get; set; }
   public ICollection<Author> Authors { get; set; }
}
public class Db : DbContext
{
   protected override void OnModelCreating(ModelBuilder mb)
   {
      mb.Entity<Author>() // an Author
      .HasMany(a => a.Books) // has many Books
      .WithMany(b => b.Authors) // with many Authors
      .UsingEntity<Dictionary<string, object>>("Publications",
        x => x.HasOne<Book>().WithMany().HasForeignKey(nameof(Book.BookId)),
        y => y.HasOne<Author>().WithMany().HasForeignKey(nameof(Author.AuthorId)),
        z => z.ToTable("Publications"));
   }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67447691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档