Otrzymuję klucz podstawowy błąd naruszenia gdy próbuję dodać element z wielu do wielu relacji:Dodanie artykułu z wielu-do-wielu relacji w Entity Framework
mam dwie klasy - Artykuły i tagi, które mają wiele do wielu relacji:
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; }
}
Kiedy dodać nowy artykuł i pozwala użytkownikowi na wejście żadnych tagów, a następnie chcę, aby utworzyć nowy tag jeśli Tag nie jest jeszcze utworzony bazy danych lub dodaj znacznik do kolekcji znaczników obiektu artykułu, jeśli znacznik już istnieje.
Dlatego gdy tworzę nowy artykuł obiekt nazwałbym poniższej funkcji:
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
}
}
Funkcja ta zasadniczo sprawdza, czy jest dostępna Tag w bazie danych, a jeżeli tak powraca tego znacznika, który jest następnie dodawany do kolekcja Tag obiektu artykułu za pomocą article.Tags.Add().
Jednak gdy próbuję zapisać to za pomocą poniższego kodu otrzymuję naruszenie więzów błędu klucz podstawowy
db.Entry(article).State = EntityState.Modified;
db.SaveChanges();
nie mogę dowiedzieć się, w jaki sposób powinny przejść o tylko tworzenie relacji między art i już istniejący Tag.
Czy możesz podać więcej szczegółów i pełny kod? –