【问题标题】:Do I really need always a bidirectional relationship in Core Data? [duplicate]我真的需要 Core Data 中的双向关系吗? [复制]
【发布时间】:2011-02-27 18:47:56
【问题描述】:

可能重复:
Does every Core Data Relationship have to have an Inverse?

示例:如果我有两个实体 Person 和 Car,并且每个实体都应该与一个 Image 实体链接 - 这应该是什么样子?

现在,我只制作三个实体:人、汽车、图像。因此,人和汽车可以链接到图像实体。它们与 Image 实体具有 1:1 的关系。

但是现在,Core Data 的一位老兄说,必须以两种方式对关系进行建模。这傻还是不傻?然后我需要两个图像实体。 CarImage 和 PersonImage。或者一个奇怪的 Image 实体,它有两种关系:一种与 Car 实体,一种与 Person 实体。

你会如何建模?

【问题讨论】:

    标签: iphone cocoa cocoa-touch macos core-data


    【解决方案1】:

    简短版本..

    是的,需要对关系进行双向建模。不,这并不意味着您需要两个 Image 实体。如果一个人与一张图片有单向关系,而您删除了该图片(它没有反向关系,所以对这个人一无所知),您的图表现在已损坏。

    所以您需要双向关系,但这并不意味着您需要两个图像实体。您的图像只需要一种关系 - 比如说“容器”,它可以是人或汽车(共享父实体会有所帮助)。

    更长的版本.. https://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html#//apple_ref/doc/uid/TP40001857-SW6

    【讨论】:

    • 或者,如果 PersonCar 差异很大以至于父实体没有意义,您可以将 personcar 关系添加到 Image 实体作为反面——特别是如果PersonCar 都可以与相同的Image 有关系。但是使用与父实体的单个 container 关系应该是您的首选方法。
    • 拜托,你能解释一下你所说的单一容器关系是什么意思吗?什么是容器关系?我假设您不会谈论某种连接表或连接实体。
    • @mystify 我的意思是你的图像实体中需要一个关系。这一实体可以作为 Person 的图像和 Car 的图像的反向关系。要做到这一点,Person 和 Car 需要相同的父实体 - 比如说“DisplayableItem”(您可以考虑是否有更好的名称 - Container 在我的回答中是一个糟糕的选择)。正如@Alex 所说,这种方法可能不适合您 - 给 Car 和 Person 相同的父实体可能不合适。所以你可以给 Image 2 关系,一个人和一辆车,并且只设置其中一个。无论哪种方式..您都不需要 2 个图像实体。
    猜你喜欢
    • 2019-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 2014-01-19
    • 1970-01-01
    • 2012-12-19
    相关资源
    最近更新 更多