簡體   English   中英

如何在Entity Framework Core中配置多對多關系

[英]How to configure a Many To Many relationship in Entity Framework Core

我有一些文章和一些作者,並希望將它們鏈接為:

  • 任何文章都可以有任意數量的作者,並且
  • 每位作者可以寫任意數量的文章

我使用此教程創建了ManyToMany關系: https : //www.learnentityframeworkcore.com/configuration/many-to-many-relationship-configuration

這是我定義班級的方式。

文章

public class Article
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    public string Title { get; set; }

    public DateTime Date { get; set; }

    public ICollection<ArticleAuthor> ArticleAuthors { get; set; }
}

作者

public class Author
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ID { get; set; }

    [Column(TypeName = "text")] public string Name { get; set; }

    [Column(TypeName = "text")] public string Email { get; set; }

    public ICollection<ArticleAuthor> ArticleAuthors { get; set; }
}

文章作者

public class ArticleAuthor
{
    public int ArticleId { get; set; }

    public Article Article { get; set; }

    public int AuthorId { get; set; }

    public Author Author { get; set; }
}

DbContext

public class AppDbContext : DbContext
{
    public AppDbContext(DbContextOptions<AppDbContext> options) : base(options)
    {
    }

    public DbSet<Article> Articles { get; set; }

    public DbSet<Author> Authors { get; set; }

    public DbSet<ArticleAuthor> ArticleAuthors { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<ArticleAuthor>()
            .HasKey(bc => new {bc.ArticleId, bc.AuthorId});
        modelBuilder.Entity<ArticleAuthor>()
            .HasOne(bc => bc.Article)
            .WithMany(b => b.ArticleAuthors)
            .HasForeignKey(bc => bc.ArticleId);
        modelBuilder.Entity<ArticleAuthor>()
            .HasOne(bc => bc.Author)
            .WithMany(c => c.ArticleAuthors)
            .HasForeignKey(bc => bc.AuthorId);
    }
}

在運行dotnet ef數據庫更新后,按預期創建了表

一切似乎都很好,除了當我嘗試通過此服務與作者添加文章時:

服務

// POST: api/Articles
[HttpPost]
public async Task<IActionResult> PostArticle([FromBody] Article article)
{
    if (!ModelState.IsValid)
    {
        return BadRequest(ModelState);
    }

    _context.Articles.Add(article);
    await _context.SaveChangesAsync();

    return Ok(article);
}

JSON格式

{
    "Title":"Title 2",
    "ReadingTime" : 2,
    "Date":"01.12.2019",
    "Theme": "1",
    "ArticleAuthors":[
        {
            "ID":"1"
        }
    ]
}

當我嘗試與作者添加文章時,我一直陷在這個錯誤中

System.InvalidOperationException:實體類型“ ArticleAuthor”上的屬性“ AuthorId”具有臨時值。 顯式設置一個永久值,或者確保將數據庫配置為為此屬性生成值。

嘗試使用此有效負載,應該需要ArticleId和AuthorId,ArticleId在父類中是隱式的,因此您至少應提供AuthorId:

{
    "Title":"Title 2",
    "ReadingTime" : 2,
    "Date":"01.12.2019",
    "Theme": "1",
    "ArticleAuthors":[
        {
            "AuthorId":"1"
        }
    ]
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM