.net core EF core Многие ко многим вставляют - PullRequest
0 голосов
/ 13 декабря 2018
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; }
}

Почему не работает этот запрос на отдых?

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

}

Получение этой ошибки

Свойство ArticleId для типа сущности ArticleTags имеет временное значение.Либо задайте постоянное значение явно, либо убедитесь, что база данных настроена для генерации значений для этого свойства.

В идеале я бы хотел, чтобы мой запрос на отдых выглядел следующим образом

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

}

где я могу просто поместить идентификаторы уже существующих тегов, как мне тогда записать отношение многие ко многим?

Должен ли я изменить свой подход и создать класс ArticleRest и просто взять список идентификаторов тегов, а затем вручнуювставить их в мою ArticleTags таблицу?

1 Ответ

0 голосов
/ 08 февраля 2019

Нужно учитывать, что отношения «многие ко многим» не поддерживаются в EF Core, поэтому вам нужна таблица соединений, которая, по-видимому, у вас есть.

Так что, возможно, у вас нет настройки отношения внешнего ключаup to Article к вашим ArticleTags

Сценарий должен выглядеть примерно так:

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]),
)

Должен решить проблему.

Если не дать это чтение должно помочь

...