Tôi đã đọc qua các câu hỏi ở đây dường như lúc đầu có vấn đề tương tự nhưng dường như không giống nhau. Rất nhiều lời xin lỗi nếu điều này được trả lời ở đâu đó nhưng giống như tôi nói tôi đã đọc qua tải và không thể tìm thấy câu trả lời.Vi phạm chính về việc thêm mối quan hệ từ nhiều bảng vào khung MVC 3
Tôi đang sử dụng Entity Framework và MVC 3. Tôi đang cố thêm thẻ vào sản phẩm trong khung thực thể của mình, có mối quan hệ nhiều đến nhiều và bảng liên kết chúng chỉ với hai phím trong bảng liên kết , do đó, EF ngưng tụ Thẻ thành thuộc tính của Sản phẩm. Bàn được thiết lập như sau:
sản phẩm: ProductID [int, khóa chính], Tên vv
Tags: TagName [chuỗi, khóa chính]
ProductTags: ProductID, TagName
Vì vậy, để truy cập ProductTags tôi chỉ có thể sử dụng product.Tags
Đây là mã của tôi:
dbProduct.Tags.Clear();
foreach (var tag in productModel.Tags)
{
Data.Tag dbTag = new Data.Tag();
dbTag.TagName = tag;
dbProduct.Tags.Add(dbTag);
}
dbProduct là thực thể Sản phẩm và Dữ liệu là không gian tên. productModel.Tags là một List<string>
Khi tôi SaveChanges()
tôi nhận được ngoại lệ sau đây:..
"Vi phạm các PRIMARY KEY constraint 'PK_Tags_1' Không thể chèn khóa trùng lặp trong đối tượng 'dbo.Tags' \ r \ nBáo cáo đã bị hủy . "
Vì vậy, điều thực sự khiến tôi là: tại sao nó lại cố thêm bất kỳ thứ gì vào dbo.Tags? Dường như với tôi, điều này chỉ cần thêm vào ProductTags chứ không phải Thẻ. Tôi không đề cập đến các thẻ ở những nơi khác trong phương pháp này và do đó, không có lúc nào cố thêm bất kỳ thứ gì trực tiếp vào bảng Thẻ. Có vẻ như tôi có thể có thứ gì đó sai trong EF nhưng tôi không thể nghĩ nó được tạo ra từ cơ sở dữ liệu gì.
Xin lỗi một lần nữa nếu điều này là hiển nhiên, tôi cảm thấy khá ngu ngốc. Bất kỳ trợ giúp rất nhiều đánh giá cao.
Chúa ơi cảm ơn bạn. Tôi đã chơi đùa với Attach nhưng hoàn toàn hiểu lầm cách nó hoạt động. Đó là cố định nó. Rất tiếc, tôi không thể 'Bình chọn bạn' vì tôi mới đăng ký nhưng cảm ơn bạn. Bạn có một số nghiệp tốt đang đến với bạn. – Smeats
@ user1054799 tuyệt vời. Bạn có thể đánh dấu phần này là câu trả lời được chấp nhận :) – Eranga
Xong. Cảm ơn một lần nữa. – Smeats