产品有name, price ,time 三个属性。
产品与制造商是多对一的关系。
有过java开发经验的人看到Core Data ,可能会感觉到跟java 的 hibernate框架特别相似,事实上也确实有很多相通之处。但是hibernate使用起来要比Core Data 复杂的多。废话不多说。进入正题
使用Core Data 建立实体间关系的时候,点击实体关系,右侧属性检查器面板会出现关系的 Delete Rule 属性。
具体有 No Action ,Nullify , Cascade , Deny 四个属性。
一, No Action
No Action表示框架不对关系的目标对象做任何操作。我不鼓励使用No Action, 因为该选项把模型一致行动工作留给了我们开发人员。Core Data一部分能力就是他的管理数据模型一致性的能力。拿我们开篇Product实例和Manufacturer实例来讲,如果把Product 的 manufacturer关系的Delete Role 设置为No Action。现在我们删除了一个Product实例,和他相关的Manufacturer 对象仍然显示这个已经不存在的产品相关。这个时候维护模型一致性的工作就留到了我们手中,我们得再手动的删除Manufacturer中这个无效的产品。
二,Nullify
Nullify选项是默认选项, 他自动消除反向关系。该选项只对反向关系是可选类型的关系起作用。假设我们将Product 的 manufacturer关系的Delete Role 由 No Action 改为了Nullify。在次情况下,如果删除了一个产品,该产品将不会再出现在Manufacturer的产品关系中。
三, Cascade
Cascade 选项级联删除关系的源和目标,在当前情况下,对于Manufacturer对象的products关系,如果此关系的Delete Rule 被设置为Cascade, 则删除一个制造商时将删除该制造商的所有商品。对于一对多的关系中,我们可以使用级联关系,一的一方被删除。则多的一方也级联删除。相反,在多对一的关系中,则一般不能使用级联关系,删除多的一方的时候一定不能直接级联删除一的一方。
四,Deny
Deny 选项避免删除所有目标对象。对于Manufacture对象的products关系,如果删除仍然有产品的制造商。Core Data讲引发一系列的错误。这种情况下,删除制造商之前应该手动删除和该制造商相关的所有产品。