estoy recibiendo un error de violación de clave principal cuando intento añadir un elemento con una relación de muchos a muchos:Adición de artículo con muchos-a-muchos relación en Entity Framework
Tengo dos clases - los artículos y etiquetas que tienen una relación de muchos a muchos:
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; }
}
al agregar un nuevo artículo que permiten al usuario introducir cualquier etiqueta y luego me quieren crear una nueva etiqueta si la etiqueta no ha sido creada todavía en la base de datos o agregue la etiqueta a la colección Etiquetas del objeto Artículo si la etiqueta ya existe.
Por lo tanto, cuando estoy creando el nuevo artículo objeto que llama a la función a continuación:
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 función básicamente comprueba si hay una etiqueta disponible en la base de datos y si es así devuelve esa etiqueta que se añade a continuación a la colección Tag del objeto Article utilizando article.Tags.Add().
Sin embargo, cuando intento guardar esta utilizando el código de abajo consigo una Violación de error de restricción PRIMARY KEY
db.Entry(article).State = EntityState.Modified;
db.SaveChanges();
no puedo averiguar cómo debería ir sobre apenas crear una relación entre el artículo y la etiqueta ya existente.
¿Puede proporcionarnos más detalles y el código completo? –