Tôi gặp phải lỗi vi phạm chính khi cố gắng thêm mục có mối quan hệ nhiều-nhiều:Thêm mục có nhiều mối quan hệ vào khung thực thể
Tôi có hai lớp - Bài viết và thẻ mà có một mối quan hệ nhiều-nhiều:
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; }
}
Khi tôi thêm một Điều mới, tôi cho phép người dùng nhập vào bất kỳ thẻ và sau đó tôi muốn tạo một khóa mới nếu Tag chưa được tạo trong cơ sở dữ liệu hoặc thêm Thẻ vào bộ sưu tập Thẻ của đối tượng Bài viết nếu Thẻ đã tồn tại.
Do đó khi tôi đang tạo ra các đối tượng Điều mới tôi gọi là chức năng dưới đây:
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
}
}
Chức năng này về cơ bản sẽ kiểm tra nếu có một Tag có sẵn trong cơ sở dữ liệu và nếu như vậy trả rằng Tag mà sau đó sẽ được thêm vào bộ sưu tập Thẻ của đối tượng Bài viết bằng cách sử dụng article.Tags.Add().
Tuy nhiên, khi tôi cố gắng để tiết kiệm này bằng cách sử dụng đoạn mã sau tôi nhận được một Vi phạm PRIMARY KEY lỗi khó khăn
db.Entry(article).State = EntityState.Modified;
db.SaveChanges();
Tôi không thể hiểu làm thế nào tôi nên đi về chỉ tạo ra một mối quan hệ giữa Điều và Thẻ đã tồn tại.
bạn có thể vui lòng cung cấp thêm chi tiết và mã đầy đủ không? –