首页 文章

核心数据多对多关系和数据完整性

提问于
浏览
0

我正在使用Core Data和多对多关系:一个建筑可以有多个部门,一个部门可以在多个建筑物中 . 以前使用过数据库后,我不确定如何在Core Data中实现它,但我在Core Data Programming Guide中找到了这个:

如果您有数据库管理的后台,这引起您的关注,请不要担心:如果您使用SQLite存储,Core Data会自动为您创建中间连接表 .

但是,实际上没有任何数据完整性 . 我已经尝试插入一些构建对象,现在只有一个属性(数字),每次我设置它所涉及的部门对象(关系) . 这导致数据库包含具有相同建筑物编号的多个建筑物对象,所有这些都与不同的部门对象相关 . 理想情况下,每个建筑物编号都有一个对象,其中包含所有不同的部门 .

所以,我的问题是:Core Data能否以某种方式维护数据完整性,或者我应该在插入之前检查具有该数字的构建对象是否已存在?看起来我必须手动检查它,但如果Core Data可以为我做这件事会很酷 .

2 回答

  • 1

    melsam 写的是对的 . 除了他的回答,我建议你使用反向关系 . 关于逆,苹果说:

    您通常应该在两个方向上建模关系,并适当地指定反向关系 . 如果进行了更改,Core Data会使用此信息来确保对象图的一致性(请参阅“操作关系和对象图完整性”) . 有关您可能不想在两个方向上建模关系的一些原因的讨论,以及可能出现的一些问题,请参阅“单向关系” .

    要理解的一个关键点是,当您使用Core Data时,您将使用对象 . 因此,在保存上下文时会解析完整性标准,或者您明确表示要处理上下文以处理挂起的更改(请参阅 processPendingChanges 方法) .

    关于你的问题,我想你必须创建一个获取请求并检索你正在寻找的对象(例如,你可以为每个对象提供一个特定的id并设置一个你想要的id的谓词) . 如果获取请求检索某些对象,则可以更新它们 . 如果没有,请使用 insertNewObjectForEntityForName:inManagedObjectContext: 创建一个新对象 . 最后保存上下文 .

    我建议你阅读Efficiently Importing Data .

    希望能帮助到你 .

  • 1

    Core Data为您维护数据完整性 . 我可以向您保证(从核心数据的大量经验),您不必手动检查完整性 . 仔细检查如何在Xcode的核心数据模型编辑器中设置关系和删除规则 . 我无法确切地说出你提供的细节可能有什么问题,但如果你四处寻找,你会发现它 .

相关问题