5

Một chút thất vọng ở đây. Tôi đang cố gắng tìm một cách để hỗ trợ cập nhật tầng với khung thực thể và dường như không có cách nào được tích hợp sẵn. Nghiên cứu trên mạng về cơ bản cho thấy mọi người nói rằng bạn không bao giờ nên thay đổi giá trị khóa chính, nhưng có trường hợp hợp lệ bạn cần (ví dụ: giá trị UPC dưới dạng khóa chính và mã vạch UPC hiện đang trở nên lớn hơn có nghĩa là cập nhật những cái hiện có và duy trì các mối quan hệ khóa ngoài thích hợp).Khuôn khổ thực thể và CẬP NHẬT CASCADE

Một cách tiếp cận rõ ràng là nhấn vào sự kiện SavingChanges, xem liệu các trường khóa chính có thay đổi hay không, và nếu như vậy duyệt các thuộc tính điều hướng và cập nhật các bảng con theo cách đó.

Điều này, theo lý thuyết, sẽ hoạt động. Nhưng nó chỉ âm thanh rườm rà. Bất cứ ai có một ý tưởng tốt hơn? Không thể tin rằng Bill sẽ bỏ công cụ này ra khỏi khuôn khổ chỉ vì hầu hết mọi người không làm điều đó. SQL Server vẫn hỗ trợ nó ...

Thx!

+0

Bill là ai ???? –

+0

Dự luật bắt đầu MS ... –

+0

xem MSDN: http://msdn.microsoft.com/en-us/library/bb738695.aspx – RPM1984

Trả lời

2

Bạn không thể thay đổi khóa chính trực tiếp qua EF. Vấn đề là EF thực hiện các thay đổi trong đó khóa chính = x. Vì vậy, bạn không thể thay đổi x.

Bạn có thể thực hiện quy trình được lưu trữ từ EF để cập nhật khóa chính.

Trong trường hợp của bạn với mã vạch, tôi sẽ có khóa chính là số tăng tự động, sau đó là mã vạch làm trường khác với chỉ mục duy nhất.

+0

Thx. Điều mã vạch là một ví dụ, và tôi có thể nghĩ về nhiều kịch bản (trong các hệ thống hiện có), nơi mã vạch sẽ được tạo thành khóa chính. Nó có ý nghĩa hoàn hảo cho đến khi EF roled vào thị trấn. Tôi nghĩ rằng cách duy nhất cho bây giờ sẽ là chìa khóa nước ngoài xử lý các tầng trên của riêng mình, mặc dù nó có nghĩa là tôi sẽ phải làm mới các thực thể sau khi lưu để đảm bảo rằng tôi có dữ liệu đúng trong bộ nhớ. –

Các vấn đề liên quan