Добавление элемента с отношением «многие ко многим» в Entity Framework

Я получаю нарушение первичного ключа ошибка при попытке добавить элемент с отношением "многие ко многим":

У меня есть два класса - Статьи и Теги, которые имеют отношение "многие ко многим":

public class Article
{
    public int ID { get; set; }
    public string Text { get; set; }
    public   ICollection<Tag>  Tags { get; set; }
}

public class Tag
{ 
    [Key]
    public string UrlSlug { get; set; }
    public string Name { get; set; }
    public ICollection<Article> Articles{ get; set; }
}

Когда я добавляю новую статью, я разрешаю Пользователь должен ввести любые теги, а затем я хочу создать новый тег, если тег еще не создан в базе данных, или добавить тег в коллекцию тегов объекта Article, если тег уже существует.

Поэтому, когда я создаю новый объект Article, я вызываю следующую функцию:

public static Tag GetOrLoadTag(String tagStr)
{
    string tagUrl = Tag.CreateTagUrl(tagStr);
    var db = new SnippetContext();
    var tagFromDb = from tagdummy in db.Tags.Include(x => x.Articles)
                    where tagdummy.UrlSlug == tagUrl
                    select tagdummy;
    if (tagFromDb.FirstOrDefault() != null)
    { return tagFromDb.FirstOrDefault(); }
    else
    {
        //create and send back a new Tag
    }
}

Эта функция в основном проверяет, есть ли доступный тег в базе данных, и, если да, возвращает этот тег, который затем добавляется в коллекцию тегов Объект статьи с использованием article.Tags.Add ().

Однако, когда я пытаюсь сохранить это, используя приведенный ниже код, я получаю ошибку нарушения ограничения PRIMARY KEY

 db.Entry(article).State = EntityState.Modified;
 db.SaveChanges();

. Я не могу понять, как мне действовать, просто создание связи между статьей и уже существующим тегом.

9
задан Craig W. 15 July 2019 в 21:09
поделиться