一个实体可以与另一个实体有多个关系吗?

Posted

技术标签:

【中文标题】一个实体可以与另一个实体有多个关系吗?【英文标题】:Can one entity have multiple relations with another entity? 【发布时间】:2013-11-21 09:27:20 【问题描述】:

我有一个关于 Coredata 实体关系的问题要问。一个实体是否可以与另一个实体有多个关系。我有以下 json:


"user": 
    "user_id": "192837190283",
    "email": "ceo@me.com",
    "first_name": "Tim",
    "last_name": "Cook",
    "home_address": 
        "street": "Downing Street",
        "number": "11",
        "city": "London",
        "state": "Greater London",
        "country": "United Kingdom",
        "zip": "12323423",
        "location": 
            "latitude": 3.1,
            "longitude": 3.2
        
    ,
    "work_address": 
        "street": "Amphitheatre Parkway",
        "number": "1600",
        "city": "Mountain View",
        "state": "California",
        "country": "United States",
        "zip": "94043",
        "location": 
            "latitude": 3.1,
            "longitude": 3.2
        
    


我在 Coredata 中有以下模型:

尽管如此,当我解析 json 时,它仍然只保存一个地址。我在人际关系上做错了吗?请建议。提前致谢。

【问题讨论】:

【参考方案1】:

这是一个非常奇怪的模型。首先,阅读我之前关于如何在 Core Data 中创建父子关系的回答。

Setting up a parent-child relationship in Core Data

然后,关于你的模型,我会稍微修改一下。特别是,我会像你一样拥有UserAddressLocation

用户将通过称为addresses 的关系拥有一个或多个地址。地址将通过称为location 的一对一关系具有位置。

最重要的是,删除homeUserworkUser 关系并添加一个布尔属性(例如isWorkAddress),让您指定地址是家庭地址还是工作地址​​。此属性将添加到Address 实体。解析 JSON 时,会以正确的方式设置属性。

它对你有用吗?

【讨论】:

嗯,在我正在工作的项目中,有些地方json有数组对象,在那些地方我习惯了很多关系但是在我共享的json中,地址不是数组而是单独的实体。所以,我不确定(尽管在我的脑海中)创建从用户到地址的多对多关系。我的问题是我没有手动解析 json,而是自动完成(我修改了 JAGPropertyConverter 库以支持 NSManagedObject),并且在该库中,当 NSDictionary 转换为 NSManagedObject 时,它必须与 json 中的确切属性匹配。 并且在json中找不到isWorkAddress或isHomeAddress,我无法单独设置。 @Joy 但是必须在模型上设置该属性。显然,您无法在 JSON 中找到它。 Yuo 解析 JSON,验证 JSON 元素是工作地址​​还是家庭地址,根据解析插入一个具有真或假值的新实体。 我想,别无选择,所以,我会像你说的那样尝试。但是如果在json“address_type”中有一个额外的字段并将所有地址放入数组中,那就更好了。

以上是关于一个实体可以与另一个实体有多个关系吗?的主要内容,如果未能解决你的问题,请参考以下文章

如何构建一个从关系中引用实体的谓词?

两个 CoreData 实体之间可以有多个“对多”关系吗?

弱实体的属性

与另一个实体的关系截断的列

核心数据关系创建

删除两个实体之间的关系 MagicalRecord