【问题标题】:Manage Compound Primary Key in Core Data管理 Core Data 中的复合主键
【发布时间】:2016-01-28 13:04:12
【问题描述】:

我想在核心数据中创建复合唯一键,因为核心数据中的实际主键是 ObjectId。请告诉我,我们怎样才能做到这一点。

更新问题:

我有一个作为模板工作的实体。并且正在使用特定组合在服务器上创建该模板。

Like Entity Name : E
and there are 4 attributes A, B, C, D.

现在实体具有以下组合是唯一的

A1-B1-C1-D1
A1-B2-C1-D1
....

所以实际上是多个属性的排列组合来创建唯一性。

现在我想在更新记录期间检测这些唯一性。

【问题讨论】:

  • Core Data 中没有主键。您可以查看this question
  • 嘿伙计,这是真的,只有 ObjectId 是主键,但我们有一个使用唯一键的替代解决方案来将记录存储在我们的数据库中。我想确认,如果就像复合主键一样,是否有任何选项可以在核心数据中创建复合唯一键。例如查询格式:stackoverflow.com/questions/11773562/…
  • 不要从 SQL 的角度思考。这是搞砸 Core Data 的最常见方式。
  • 也许您应该询问您正在尝试完成什么,而不是询问如何实施特定解决方案,尤其是因为该特定解决方案与您希望使用的技术背道而驰。跨度>

标签: ios core-data unique


【解决方案1】:

ObjectID 不是主键。 Core Data 中没有主键。

Core Data 不是数据库。在您的设计中将其视为数据库会导致问题。 Core Data 是一个对象图,可以保存到磁盘,一种可以保存到的格式是数据库。首先将其视为对象图。

在 iOS 9 和 OS X 10.11 中添加了使用唯一 ID 进行重复检测的功能。查看 2015 年的 WWDC 视频,了解这些变化。

更新

即使在您更新后,我的回答仍然准确。在 iOS 9 中,他们添加了跨属性定义唯一 ID 的功能,这将有助于解决更新/插入问题。有关此功能的详细信息,请观看 2015 WWDC 视频。

如果您的目标是 iOS 9 之前的版本,那么,不; Core Data 中没有可以为您解决此问题的功能,您需要自己解决。这是所有持久层都面临的经典“插入与更新”问题的一部分。

解决方案是创建一个 ID 列表,然后获取具有这些标识符的所有对象,然后迭代您正在处理的内容并使用获取的列表来确定您是否需要插入。

更新到 iOS 9 并使用新的 API 更容易。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    相关资源
    最近更新 更多