L'ajout d'un Élément avec Plusieurs-à-Plusieurs Relations Dans le Cadre de l'Entité

Je suis une violation de clé primaire d'erreur lorsque je tente d'ajouter un élément à plusieurs-à-plusieurs relations:

J'ai deux classes: les Articles et les Balises qui ont un plusieurs-à-plusieurs relations :

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; }
}

Quand j'ajoute une nouvelle Article je permettre à l'utilisateur d'entrer des Tags et puis je veux créer une nouvelle Balise si la Balise n'est pas encore créé dans la base de données ou ajouter le Tag de la collection de Balises de l'Article objet si le Tag existe déjà.

Donc quand je crée le nouvel Article objet que j'appelle le dessous de la fonction:

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
            }

        }

Cette fonction essentiellement vérifie si il y a un Tag dans la base de données et si oui retourne cette Balise qui est ensuite ajoutée à l'Étiquette de la collecte de l'Article objet de l'article.Les balises.Ajouter().

Cependant, lorsque je tente de sauver ce à l'aide du code ci-dessous je reçois une Violation de la contrainte de CLÉ PRIMAIRE d'erreur

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

Je ne peux pas comprendre comment je devrais aller sur juste de créer un lien entre l'Article et le déjà existant Tag.

pouvez-vous veuillez donner plus de détails et le code complet?

OriginalL'auteur Judo | 2011-07-26