Hãy xem xét kịch bản này thường bị ngắt kết nối:LINQ Để ngoại lệ SQL với Đính kèm(): Không thể thêm một thực thể với một chìa khóa đó là đã được sử dụng
- tải một đối tượng khách hàng từ SQL Server sử dụng LINQ to SQL
- người dùng chỉnh sửa thực thể và tầng trình bày gửi lại thực thể đã sửa đổi.
- lớp dữ liệu, sử dụng L2S, phải gửi những thay đổi SQL Server
xem xét LINQ này Để truy vấn SQL có ý định là để có một thực thể khách hàng.
Cust custOrig = db.Custs.SingleOrDefault(o => o.ID == c.ID); //get the original
db.Custs.Attach(c, custOrig); //we don't have a TimeStamp=True property
db.SubmitChanges();
DuplicateKeyException: Cannot add an entity with a key that is already in use.
Câu hỏi
- Làm thế nào bạn có thể tránh ngoại lệ này?
- Chiến lược tốt nhất để cập nhật thực thể KHÔNG có/muốn/cần thuộc tính dấu thời gian là gì?
Sub-Optimal Cách giải quyết
- tự đặt mỗi tài sản trong khách hàng được cập nhật cho khách hàng orig.
- quay lên một DataContext
+1; cảm ơn! Điều đó đã thực sự làm việc! Tôi sẽ để lại câu hỏi này 'chưa được trả lời' cho bây giờ, nhưng câu trả lời này chắc chắn giải quyết được vấn đề! –
Như JustLoren nói Đính kèm là có cho một bối cảnh một thực thể nó chưa có - nó không thể được sử dụng để thay thế một. Trong một tình huống điển hình nếu bạn đang nhận được một đối tượng trở lại nó là đôi khi sau đó và sẽ được gắn vào một bối cảnh dữ liệu mới. – DamienG