trong khi nó không phải là ngay lập tức rõ ràng trong trình soạn thảo mô hình dữ liệu đồ họa từng mối quan hệ recipocal tức là mỗi
<-->
... thực sự là hai mối quan hệ riêng biệt mỗi delet riêng của mình quy tắc điện tử. Quy tắc xóa được kích hoạt khi một đối tượng của thực thể có quy tắc xóa bị xóa.
Vì vậy, nếu trong trình soạn thảo mô hình dữ liệu bạn có hai thực thể Alpha
và Beta
với một mối quan hệ:
Alpha.betas<-->>Beta.alpha
... sau đó bạn thực sự có hai mối quan hệ như vậy:
Alpha.betas--(delete rule)-->>Beta.alpha
Beta.alpha--(delete rule)-->Alpha.betas
Bạn không bao giờ muốn thiết lập quy tắc xóa như sau:
Alpha.betas--(cascade)-->>Beta.alpha
Beta.alpha--(cascade)-->Alpha.betas
… vì xóa bất kỳ một trường hợp Beta
sẽ xóa đối tượng Alpha
liên kết sẽ kích hoạt việc xóa tất cả các đối tượng có liên quan Beta
. Tùy thuộc vào các chi tiết của mô hình dữ liệu của bạn, một thác có đi có thể xóa một đoạn lớn dữ liệu của bạn một cách tình cờ.
gì bạn thực sự muốn là:
Alpha.betas--(cascade)-->>Beta.alpha
Beta.alpha--(nullify)-->Alpha.betas
Bây giờ, khi bạn xóa đối tượng Alpha
, nó sẽ xóa tất cả liên quan đến Beta
đối tượng.
Khi một thác bị chặn, thường là vấn đề với mối quan hệ được yêu cầu. Không thể nói chắc chắn mà không có chi tiết về mô hình dữ liệu.
Câu hỏi nhanh, khi tôi chạy '[context deleteObject: EntityA];' điều này sẽ đảm bảo rằng tất cả các bản beta bị xóa ngay, nếu tôi có nó được thiết lập giống như bạn có trong mã snipit cuối cùng? –
Giả sử không có thứ gì khác chặn việc xóa. – TechZen
Nhưng nếu tôi xóa tất cả Betas thì sao? Làm thế nào để làm cho Alpha xóa tự động trong trường hợp như vậy? – shoumikhin