【问题标题】:Maintaining Complex Unidirectional Relationships in Core Data在核心数据中维护复杂的单向关系
【发布时间】:2019-03-12 12:23:41
【问题描述】:

我正在将 Realm 中的数据模型迁移到 Core Data(这样我就可以与 Ensembles 同步)。该模型是一个图,在 Realm 中,我自己通过交易中的删除等规则来管理图的完整性。

我在这里制作了一个示例图,旨在描述我的问题的症结。

我图中的所有对象都是事物。事物与其子事物具有有序的多对多关系。但是,subThings 有多种链接方式。例如,一个 DerivedFromThing 类型有两个对多的关系(它们的逆将在另一个 Thing 的 subThings 中)。

所以,我的图表有一套完整的逆向关系,但不是那种在 Core Data 中似乎可以建模的方式。

由于我已经拥有管理完整性的代码,我很高兴自己处理所有关系。但是,我在构建中收到警告,因此我想仔细检查我是否采用了正确的方法。

有没有办法在 Core Data 中为我的多对多关系建模?如果没有,我是否会忽略我的警告而面临问题。

谢谢。

【问题讨论】:

    标签: core-data


    【解决方案1】:

    我建议避免 CoreData 中的单向关系:根据我的经验,当您对逆向一无所知时,CD 会隐含地将其视为“一对一”,这可能不是您想要的。

    虽然 CD 可以处理多对多关系,但在您的情况下,我认为您可能需要通过直接建模一个中间实体(或者可能是两个或更多)来实现您的关系。例如,您可能有一个名为 Association 的实体,带有

    • associationType 的属性(“父”、“超级”或其他)
    • associatedToThing 实体的一对一关系(具有一对多逆向关系)
    • associatedFromDerivedFromThing 实体的一对一关系(也有一对多逆)

    很难提供进一步的建议,因为我怀疑您的真实模型比您的示例更复杂,但上述方法应该提供很好的灵活性。有关详细信息,请参阅 the Core Data Programming Guide 中的“基于其语义建模关系”。

    【讨论】:

    • 非常感谢。这是对我如何完整描述结构的非常清楚的解释。我会用这种方法玩一玩。它会使事情变得更加复杂,但我不想遇到意想不到的 CD 隐含假设。
    • 这并没有像我希望的那样完全映射出来。为了使中间实体工作,我要么需要有多个派生的中间实体类型(例如连接 subThings 和 superThings 的类型,连接 subThings 和 parentThings 的类型),要么我必须有一个通用的“superThings”链接使用这里提出的关联类型的东西。我将研究两者,看看最优雅的结果。
    猜你喜欢
    • 2012-02-20
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 2011-11-16
    • 2015-05-27
    • 1970-01-01
    • 2013-09-22
    • 2011-03-30
    相关资源
    最近更新 更多