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.

questionAnswers(2)

yourAnswerToTheQuestion