2015-03-25 49 views
36

我對核心數據關係刪除規則有點模糊。所以如果有人能幫我回答一些關於他們的問題。瞭解核心數據刪除規則一對多

我有實體A和B. A與B中多關係,和B具有與A

一個到一個關係的< --- >> B

現在,如果我將A的刪除規則設置爲Cascade,我知道它會刪除與它相關的所有Bs。但是如果我將它設置爲Nullify,它會將Bs設置爲NIL還是將外鍵設置爲Nil?

而且我到處關注從B到A的關係,我應該將它設置爲Nullify嗎?那隻會讓A的「B對象」無效?或者它會否定所有與A有關的B? Cascade呢?它會刪除與A相關的所有B,還是僅刪除特定的B?

或者我只對B到A的關係使用「No Action」,這樣當我刪除B時,A不會發生變化,但是對B的引用將不存在?

我很高興與這些混淆,所以請原諒我的問題。

謝謝。

+2

非常好的描述question..upvoted – NSPratik 2016-03-10 09:39:23

回答

55

如果您將刪除規則設置爲「無效」並刪除A對象,則會刪除對該對象在Bs中的引用。反過來也是一樣的。如果你有級聯並刪除B,那麼它將刪除指向B的A.然後,它將遵循從A到其餘Bs(級聯或無效)的刪除規則。

您設置的規則真的取決於您的數據模型。如果A是客戶,B是他們的訂單,那麼您可以設置A-> B規則來拒絕(如果客戶有訂單則不會刪除A)或級聯(刪除客戶時刪除訂單)。 B-> A規則可能會「無效」。如果訂單被刪除,只需刪除客戶訂單的參考。

的關係,刪除規則在Apple Core Data Programming Guide

+1

與「無爲」將簡單的保持基準,沒有它真正存在的,對不對? – Shamy 2015-03-25 12:28:04

+0

是的,使用「無操作」刪除A可能會導致B引用不存在的A – Paulw11 2015-03-25 18:22:37

+0

「Nullify 刪除對象之間的關係但不刪除任何對象 這隻有在部門關係爲員工是可選的,或者如果您確保在下一次保存操作之前爲每位員工設置新部門 它表示「不要刪除任何對象」。這真是令人困惑。所以如果我真的想刪除A,我不能將規則設置爲無效? – LShi 2017-02-09 14:39:28