【问题标题】:Is Core Data migration needed when a new attribute is added to an existing entity? [closed]将新属性添加到现有实体时是否需要迁移核心数据? [关闭]
【发布时间】:2021-05-07 08:39:16
【问题描述】:

我读过几篇文章,指出只要实体、属性或关系发生变化,就应该进行轻量级迁移。但是几天前我和我的前辈交谈时,他问我添加新属性时是否真的需要轻量级迁移。这让我很困惑。我知道在对 Core Data 模型进行任何更改之前,我们应该始终创建一个新版本。这是否意味着版本控制与迁移相同。如果我们重命名现有属性,是否需要迁移。如果有人可以帮助我,我将不胜感激。

【问题讨论】:

  • 我对您的3个问题的看法,问题1:是(您需要轻量级迁移,因为coredata可以推断出诸如添加,删除或重命名实体的属性等更改)问题2:是的,解释与问题 1 问题 3 相同:不,它们不是。迁移可以是 2 种轻量级迁移(其中 coredata 推断更改并在请求时自动执行迁移),重量级迁移,当您意识到 coredata 推断更改的能力不足以应对您的更改并且需要部分或全部处理手动迁移

标签: ios objective-c swift core-data core-data-migration


【解决方案1】:

向现有实体添加新属性时是否需要迁移?

需要迁移,但不是您自己创建的。 automatic lightweight migration 完全涵盖了添加属性。当您将属性添加到核心数据架构并打开启用轻量级迁移的现有商店时,现有商店将无缝迁移。

根据经验,在向现有实体添加新实体或属性时,您可以使用自动轻量级迁移。对于现有属性的类型更改和重命名,您很可能需要创建一个heaveweight migration,否则在使用新架构打开现有商店时数据将丢失。

迁移和版本控制是一回事吗

没有。版本控制是指核心数据模式,而迁移应用于现有存储。当您要更改现有实体或关系时,您应该添加一个新的架构版本。此外,当您以该架构为目标创建重量级迁移时,在更改架构中的任何内容之前添加新架构非常重要。否则迁移将中断,因为它不再有匹配的目标。

【讨论】:

  • 感谢您的回复!!重命名属性不需要映射模型吗?(如apple docs 中提到的)并且编写映射模型意味着这是一个重量级的迁移,不是吗?
猜你喜欢
  • 2015-02-09
  • 2018-10-13
  • 2015-06-17
  • 1970-01-01
  • 2020-09-19
  • 2016-09-07
  • 1970-01-01
  • 2017-02-07
  • 1970-01-01
相关资源
最近更新 更多