stackoverflow.com/questions/1173001/...
опытке добавить элемент с отношением «многие ко многим» возникает ошибка нарушения первичного ключа:
У меня есть два класса - Статьи и Теги, которые имеют отношение многие ко многим:
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 с помощью article.Tags.Add ().
Тем не менее, когда я пытаюсь сохранить это, используя приведенный ниже код, я получаю сообщение об ошибке Violation of PRIMARY KEY
db.Entry(article).State = EntityState.Modified;
db.SaveChanges();
Я не могу понять, как мне следует просто создать отношения между статьей и уже существующим тегом.