我有三个实体,A,B和C.
A与B具有多对多的关系 和B与A有很多关系
然后C与A有一对一(正确的术语?)关系,与B有一对一的关系。
但是我想要它,所以C与A的关系必须是与B相关的A的实例。
通常在代码中我会使用NSArrays代替关系,然后在C中存储所需实例的索引。这是我第一次使用CoreData,所以我对它的大部分内容都不确定。
编辑:澄清:
答案 0 :(得分:1)
首先,如果您避免使用b
来表示几种不同的事情,那么讨论您的情况会更容易。您的图表中有四种关系;为了便于讨论,您可以将它们命名为d
,e
,f
和g
。
要回答您的问题,您不能也不需要包含您在模型中讨论的那种限制。该模型定义了托管对象的种之间的关系,但它没有说明单个对象的任何内容。在学习核心数据时,通常最好尝试用对象思考,但是你应该知道你在模型中定义的实体类似于关系数据库中的表:它们定义可以存储,而不是代码应该或必须(或不能)存储。
要将C.a限制为C.b.bs中的A之一,您需要编写一些代码。如果C.a仅设置在一个位置,您可以选择在该代码中实现限制。如果限制对于C的正确操作至关重要,您可以改为(或者另外)选择将检查添加到C.a的setter,以验证A是允许的A之一。您可能还需要修复Cb的setter,这样如果Cb发生变化,它会验证Ca是否仍然有效,并且如果不是Ca则执行适当的操作(清除Ca,选择新的Ca,拒绝接受新的Cb,发布通知) ,抛出异常,无论如何)。