简体   繁体   English

.net核心EF核心多对多插入

[英].net core EF core Many to many insert

public class Article
{
    [Key]
    public int Id { get; set; }
    [Required]
    public string Title { get; set; }
    [Required]
    public string Lead { get; set; }
    [Required]
    public string Content { get; set; }
    [Required]
    public bool IsPublished { get; set; }

    public int CategoryId { get; set; }
    public Category Category { get; set; }
    public IList<ArticleTags> ArticleTags { get; set; }
}

public class Tag
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }

    public IList<ArticleTags> ArticleTags { get; set; }
}


public class ArticleTags
{
    public int ArticleId { get; set; }
    public Article Article { get; set; }

    public int TagId { get; set; }
    public Tag Tag { get; set; }
}

Why won't this rest request work? 为什么其余的请求不起作用?

{
    "Title":"tit",
    "Lead":"lead",
    "Content":"c ",
    "IsPublished":false,
    "Category":{
        "Name":"Cat"
    },
    "ArticleTags":[
        {
            "Name":"tag1"
        },
        {
            "Name":"tag2"
        }   
    ]

}

Getting this error 得到这个错误

The property ArticleId on entity type ArticleTags has a temporary value. 实体类型ArticleTags上的属性ArticleId具有一个临时值。 Either set a permanent value explicitly or ensure that the database is configured to generate values for this property. 显式设置一个永久值,或者确保将数据库配置为为此属性生成值。

Ideally, I'd like my rest request to look like this 理想情况下,我希望我的休息请求看起来像这样

{
    "Title":"tit",
    "Lead":"lead",
    "Content":"c ",
    "IsPublished":false,
    "Category":{
        "Name":"Cat"
    },
    "ArticleTags":[
        1,2,3,4,5   
    ]

}

where I can just put ids of already existing tags, how should I write my many to many relationship then? 我可以在其中放置已经存在的标签的ID,那么我该如何写多对多关系呢?

Should I change my approach and create ArticleRest class and just take list of tag ids and then manually insert them into my ArticleTags table? 我是否应该更改方法并创建ArticleRest类,仅获取标签ID列表,然后手动将其插入我的ArticleTags表中?

Something to consider is Many to Many relationships are not supported in EF Core so you need a Join Table which it seems you do have. 需要考虑的是EF Core不支持“多对多”关系,因此您似乎需要一个联接表。

So the other thing is you might not have setup the Foreign key relationship up from Article to your ArticleTags 因此,另一件事是您可能尚未设置从Article到ArticleTags的外键关系

The script should look something like this: 该脚本应如下所示:

CREATE TABLE [dbo].[ArticleTags] (
[ArticleTagId] INT IDENTITY(1,1) NOT NULL,
[ArticleId]    INT NOT NULL,
[TagId]        INT NOT NULL,
CONSTRAINT [PK_ArticleTags_ArticleTagId] PRIMARY KEY CLUSTERED ([ArticleTagId] ASC),
CONSTRAINT [FK_Article_ArticleId_ArticleTags_ArticleId] FOREIGN KEY ([ArticleId]) REFERENCES [dbo].[Article] ([ArticleId]),
CONSTRAINT [FK_Tag_TagId_ArticleTags_TagId] FOREIGN KEY ([TagId]) REFERENCES [dbo].[Tag] ([TagId]),
)

Should solve the problem. 应该解决问题。

If not giving this a read should help 如果不这样做,应该会有所帮助

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM