0

如果我有两个实体;Foo 和酒吧。Foo 有两个属性;类型为 Bar 的 bar1 和 bar2。现在 Foo 与 Bar 有一对多的关系吗?至少应该像在 Core Data 中那样建模吗?还是两个一对一的关系?如何在 Core Data 中正确设置它?我理解的一对多关系,但不是最后一种关系类型?这甚至是可能的还是好的方法?

4

3 回答 3

2

Foo 有两个属性;类型为 Bar 的 bar1 和 bar2。现在 Foo 与 Bar 有一对多的关系吗?

不,Foo 与 Bar 有两个关系,这些关系被命名为bar1and bar2。它们是“一对一”还是“一对多”取决于您如何指定它们。选择模型中的每一个,看看是否选中了“to-many”复选框。

至少应该像在 Core Data 中那样建模吗?

这取决于您要建模的内容。您是否希望与特定对象有两个独立的关系(即两个不同的“一对一”关系),还是希望与一组对象有一个单独的关系(一个“一对多”关系)?这是一个可能有助于澄清事情的例子......

一个企业可能有零个或多个员工。一个企业也只有一个首席执行官和一个董事会主席。employees因此,Business 实体可能具有以 Person 实体命名的“对多”关系。ceo它也可能具有名为and的“一对一”关系chairman,同样与 Person。这些可能不是绝对必要的——也许 CEO 和董事长都是员工,因此您可以通过搜索员工集并按职称过滤来找到他们。但是,如果您要经常使用它们并且不想每次都搜索成千上万的其他员工,那么将它们作为单独的关系会很方便。

如何在 Core Data 中正确设置它?

同样,这取决于您要建模的内容。例如,employees关系的反面将是 Person 的employer“一对一”关系。

于 2012-05-22T16:55:06.637 回答
1

实体有几种不同类型的属性,它们具有属性和关系(以及获取的属性,但这不是重点)。听起来 Foo 和 Bar 是您使用 Foo 创建的两个具有 Bar 属性的类。然后你想将它们同化为核心数据模型中的实体。

通常情况下,事情是反过来做的。您在核心数据模型编辑器中创建实体。然后,您通过创建关系来链接实体。如果您添加从 Foo 到 Bar 的关系,那么最好创建从 Bar 到 Foo 的反向关系。

  1. 创建从 Foo 到 Bar 的关系
  2. 创建从 Bar 到 Foo 的关系
  3. 选择最后一个关系并将其逆设置为第一个

现在,如果您希望 Xcode 生成匹配的 NSManagedObject 子类 Foo 和 Bar,那么您可以选择 Entities 并在 Xcode Editor 菜单中选择“Create NSManagedObject subclasses”

然后,您将看到您是两个具有适当属性的类,以匹配您的模型的设置方式。

我写了一本关于核心数据的书,它解释了所有这些更深层次的细节。

于 2012-05-22T16:14:54.180 回答
0

这是两个一对一的关系。要进行反向,只需在反向字段中选择您的实体(当您创建关系时)。

于 2012-05-22T15:54:45.523 回答