dicionar item com relacionamento muitos-para-muitos no Entity Framewo
Estou recebendo um erro de violação de chave primária quando tento adicionar um item com um relacionamento muitos-para-muitos:
Tenho duas classes - artigos e tags que têm um relacionamento muitos-para-muitos:
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; }
}
Quando adiciono um novo artigo, permito que o usuário insira qualquer tag e, em seguida, desejo criar uma nova tag se a tag ainda não estiver criada no banco de dados ou adicionar a tag à coleção Tags do objeto Article se a tag já existe
Portanto, ao criar o novo objeto Article, chamo a função abaixo:
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
}
}
Esta função basicamente verifica se existe uma tag disponível no banco de dados e, se houver, retorna essa tag que é adicionada à coleção de tags do objeto Article usando article.Tags.Add ().
No entanto, quando tento salvar isso usando o código abaixo, recebo um erro de restrição Violation of PRIMARY KEY
db.Entry(article).State = EntityState.Modified;
db.SaveChanges();
Não consigo descobrir como devo criar uma relação entre o Artigo e a Tag já existente.