Ho letto un sacco di domande su questo argomento che sembrano in un primo momento avere un problema simile ma non sembrano proprio le stesse. Scuse enormi se questo è stato risposto da qualche parte, ma come ho detto che ho letto carichi e non riesco a trovare una risposta.Violazione della chiave primaria sull'aggiunta di relazioni da molte a molte tabelle collegate nel framework di entità MVC 3
Sto utilizzando Entity Framework e MVC 3. Sto cercando di aggiungere tag ai prodotti nel mio framework entità, che hanno una relazione molti a molti e una tabella che li collega semplicemente con le due chiavi nella tabella dei collegamenti , quindi EF condensa i tag in una proprietà del prodotto. Le tabelle sono impostati in questo modo:
prodotto: ProductID [int, chiave primaria], nome, ecc
Tag: TagName [stringa, chiave primaria]
Producttags: ProductID, TagName
Quindi, per accedere Producttags posso solo usare product.Tags
Questo è il mio codice:
dbProduct.Tags.Clear();
foreach (var tag in productModel.Tags)
{
Data.Tag dbTag = new Data.Tag();
dbTag.TagName = tag;
dbProduct.Tags.Add(dbTag);
}
dbProduct che è un'entità Product e Data è lo spazio dei nomi. productModel.Tags è un List<string>
Quando ho SaveChanges()
ottengo la seguente eccezione:..
"Violazione di vincolo PRIMARY KEY 'PK_Tags_1' Impossibile inserire chiave duplicata 'dbo.Tags' oggetto \ r \ nLa dichiarazione è stata terminata. "
Quindi, quello che mi sta veramente facendo è: perché sta cercando di aggiungere qualcosa a dbo.Tags? Mi sembra che questo dovrebbe semplicemente aggiungere a ProductTag e non ai Tag. Non faccio menzione di tag altrove in questo metodo e quindi in nessun punto provo ad aggiungere qualcosa direttamente nella tabella Tag. Mi sembra di avere qualcosa di sbagliato nel mio EF, ma non riesco a pensare a cosa e sia stato generato dal database.
Scusa ancora se questo è chiaramente ovvio, mi sento piuttosto stupido. Qualsiasi aiuto è molto apprezzato.
Oh dolce signore grazie. Ho giocato in giro con Attach ma ho completamente frainteso come funziona. Questo è risolto. Purtroppo non posso "votarti" dato che sono appena iscritto ma grazie. Hai del buon karma che ti viene incontro. – Smeats
@ user1054799 ottimo. È possibile contrassegnare come risposta accettata :) – Eranga
Fine. Grazie ancora. – Smeats