Tôi có một ứng dụng mà bạn có thể tạo một loại sản phẩm mới và thêm vào sản phẩm đó một số thành phần. Sản phẩm và nguyên liệu là cả hai thực thể được lưu trong cơ sở dữ liệu. Thực thể sản phẩm có một tập hợp các thực thể thành phần.Thực thể 4.1 Cập nhật thực thể cha mẹ hiện tại với các thực thể con mới
(phiên bản đơn giản)
public class Product
Public Sub New()
Me.Ingredients = New List(Of Ingredient)()
End Sub
Property Ingredients as ICollection(Of Ingredient)
end class
Khi tôi lưu các sản phẩm cho lần đầu tiên, mọi việc suôn sẻ: Tôi chỉ cần thêm nó vào bối cảnh và gọi SaveChanges.
myDataContext.Products.Add(product)
myDataContext.SaveChanges()
Cả sản phẩm (bố mẹ) và thành phần (trẻ em) được lưu và liên kết với nhau. Tất cả đều tốt.
Tuy nhiên khi tôi thêm/xóa một thành phần vào sản phẩm hiện có, tôi bắt đầu gặp sự cố. Lần đầu tiên tôi xóa bộ sưu tập thành phần hiện có trong thực thể sản phẩm và sau đó thêm danh sách các thành phần được cập nhật lại (tôi không sử dụng lại thành phần thêm vào thời điểm này). Sau đó tôi thay đổi trạng thái của thực thể sản phẩm thành sửa đổi và gọi savechang. Tuy nhiên, trên trạng thái thay đổi, hãy nhận ngoại lệ "Một đối tượng có cùng khóa đã tồn tại trong ObjectStateManager".
myDataContext.Entry(product).State = EntityState.Modified
Sau khi "một số" tìm kiếm tôi đã tìm ra rằng vấn đề là tất cả các thành phần có một khóa chính từ 0 (như họ không được thêm vào nào) và khi bạn thay đổi trạng thái của thực thể cha mẹ (sản phẩm), tất cả các thực thể con (thành phần) được gắn vào ngữ cảnh bằng khóa 0, gây ra vấn đề vì các khóa không còn là duy nhất nữa.
Tôi đã tìm kiếm giải pháp nhưng không thể tìm ra cách giải quyết vấn đề này. Tôi đã thử thêm các thành phần vào bối cảnh trước khi thay đổi trạng thái, nhưng sau đó liên kết giữa sản phẩm và thành phần bị thiếu ... Làm cách nào để cập nhật thực thể cha mẹ hiện có với các thực thể con chưa được thêm mới?
Tôi sử dụng Khung pháp nhân 4.1 và Mã đầu tiên.
Hy vọng bạn có thể giúp tôi!
Điều này hoạt động hoàn toàn tuyệt đối !! Cảm ơn nhiều! – DirkDooms
Mất nhiều thời gian để tìm cách cập nhật thực thể đúng cách. Cảm ơn cho context.Entry (productInDb) .CurrentValues.SetValues (sản phẩm); –
Điều này thật tuyệt, bây giờ tôi chỉ cần tìm ra cách làm cho nó hoạt động thông qua sự phản chiếu để tôi có thể lặp qua tất cả các bộ sưu tập trên một thực thể mà tôi đang lưu. – Nikkoli