產(chǎn)品有name, price ,time 三個(gè)屬性顿仇。
產(chǎn)品與制造商是多對(duì)一的關(guān)系淘正。
有過(guò)java開(kāi)發(fā)經(jīng)驗(yàn)的人看到Core Data 摆马,可能會(huì)感覺(jué)到跟java 的 hibernate框架特別相似,事實(shí)上也確實(shí)有很多相通之處鸿吆。但是hibernate使用起來(lái)要比Core Data 復(fù)雜的多囤采。廢話不多說(shuō)。進(jìn)入正題
使用Core Data 建立實(shí)體間關(guān)系的時(shí)候惩淳,點(diǎn)擊實(shí)體關(guān)系蕉毯,右側(cè)屬性檢查器面板會(huì)出現(xiàn)關(guān)系的 Delete Rule 屬性。
具體有 No Action ,Nullify , Cascade , Deny 四個(gè)屬性思犁。
一恕刘, No Action
No Action表示框架不對(duì)關(guān)系的目標(biāo)對(duì)象做任何操作。我不鼓勵(lì)使用No Action抒倚, 因?yàn)樵撨x項(xiàng)把模型一致行動(dòng)工作留給了我們開(kāi)發(fā)人員褐着。Core Data一部分能力就是他的管理數(shù)據(jù)模型一致性的能力。拿我們開(kāi)篇Product實(shí)例和Manufacturer實(shí)例來(lái)講托呕,如果把Product 的 manufacturer關(guān)系的Delete Role 設(shè)置為No Action『兀現(xiàn)在我們刪除了一個(gè)Product實(shí)例,和他相關(guān)的Manufacturer 對(duì)象仍然顯示這個(gè)已經(jīng)不存在的產(chǎn)品相關(guān)项郊。這個(gè)時(shí)候維護(hù)模型一致性的工作就留到了我們手中馅扣,我們得再手動(dòng)的刪除Manufacturer中這個(gè)無(wú)效的產(chǎn)品。
二着降,Nullify
Nullify選項(xiàng)是默認(rèn)選項(xiàng)差油, 他自動(dòng)消除反向關(guān)系。該選項(xiàng)只對(duì)反向關(guān)系是可選類型的關(guān)系起作用任洞。假設(shè)我們將Product 的 manufacturer關(guān)系的Delete Role 由 No Action 改為了Nullify蓄喇。在次情況下,如果刪除了一個(gè)產(chǎn)品交掏,該產(chǎn)品將不會(huì)再出現(xiàn)在Manufacturer的產(chǎn)品關(guān)系中妆偏。
三, Cascade
Cascade 選項(xiàng)級(jí)聯(lián)刪除關(guān)系的源和目標(biāo)盅弛,在當(dāng)前情況下钱骂,對(duì)于Manufacturer對(duì)象的products關(guān)系,如果此關(guān)系的Delete Rule 被設(shè)置為Cascade挪鹏, 則刪除一個(gè)制造商時(shí)將刪除該制造商的所有商品见秽。對(duì)于一對(duì)多的關(guān)系中,我們可以使用級(jí)聯(lián)關(guān)系讨盒,一的一方被刪除解取。則多的一方也級(jí)聯(lián)刪除。相反催植,在多對(duì)一的關(guān)系中肮蛹,則一般不能使用級(jí)聯(lián)關(guān)系勺择,刪除多的一方的時(shí)候一定不能直接級(jí)聯(lián)刪除一的一方。
四伦忠,Deny
Deny 選項(xiàng)避免刪除所有目標(biāo)對(duì)象省核。對(duì)于Manufacture對(duì)象的products關(guān)系,如果刪除仍然有產(chǎn)品的制造商昆码。Core Data講引發(fā)一系列的錯(cuò)誤气忠。這種情況下,刪除制造商之前應(yīng)該手動(dòng)刪除和該制造商相關(guān)的所有產(chǎn)品赋咽。