0

我很难理解 Core Data 的反比关系。例如,假设有两个实体:postcomment,其中

  • posthas_manycomments
  • comment属于post

使用 xcode 的可视化 coredata 编辑器,我将创建两个实体,然后通过以下方式链接它们:

  1. 连接post到目的地comment并选择to many
  2. 连接comment到目的地post但未选择to many
  3. 确保上面#2 的关系是inverse#1 的。

这是我的问题:

  1. 当您选择inverse. 这相当于在其他ORMs 中,比如 ActiveRecord。
  2. 如果我没有将#2 的倒数指定为#1,而是将其指定为#1 并说它的倒数是#2,它会产生相同的效果吗?
4

2 回答 2

0
  1. 设置逆向意味着如果您更改一种关系,则逆向保持同步。例如,如果您向帖子添加评论,那么评论的“帖子”关系将自动设置。同样,如果您确实设置了评论的帖子属性,那么该评论将自动添加到帖子的评论集合中。所以下面两行代码是等价的:

    newComment.post = aPost;
    [aPost addCommentsObject:newComment];
    

如果您没有指定反向,那么您将必须包含两条线来创建关系。建议使用逆,因为它更容易维护对象图的完整性。这实际上是如何保存在存储中的取决于存储类型,但是如果您使用的是 sqlite 存储,那么很容易窥探内部以了解 Core Data 正在做什么。

  1. 它们是等价的。
于 2013-09-18T10:17:07.227 回答
0

我最常听到的一句话是 CoreData 最重要的是维护对象图,其次是 ORM。因此,考虑到这一点,我想说的是,当您在幕后建立inverse关系时,您会注意到这是一种双向关系,而不是两种单向关系。没有它,您可以指定 acomment有很多posts,但是如果您将帖子添加到评论中,您可能无法遍历从评论到帖子然后返回的图表。

来自 ActiveRecord,如果您将其视为将键保存在列中并注意关系,这可能没有多大意义 - 但 CoreData 可以有许多不同的数据存储格式,并且存储数据并不暗示反向关系。

如果您转到#1并说它的倒数是#2,它应该具有相同的效果-但这很容易测试和查看。

于 2013-09-17T19:17:41.117 回答