核心数据版本控制和迁移

Posted

技术标签:

【中文标题】核心数据版本控制和迁移【英文标题】:Core data versioning and migration 【发布时间】:2011-08-11 05:38:35 【问题描述】:

我有已发布应用的旧版核心数据模型。现在,在应用程序的下一个版本中,我将核心数据模型迁移到新模型。有没有办法在实际迁移到模型的新版本之前从旧模型中获取属性值,或者有可能知道是否要进行迁移。

【问题讨论】:

【参考方案1】:

当您迁移时,Core Data 实际上会为您移动现有值。如果您正在进行相对简单的迁移,例如添加或删除某些属性,Core Data 会尽最大努力使迁移尽可能无缝。在许多情况下,除了设置新模型之外,您无需进行任何更改。请参阅my answer here 了解更多信息。

【讨论】:

+1 迁移实际上是将现有持久性存储重写为新版本数据模型所规定的新结构的过程。【参考方案2】:

是的,有可能。

要从旧模型中获取属性值,您需要创建自定义实体迁移策略(NSEntityMigrationPolicy 子类)。然后在-createDestinationInstancesForSourceInstance:entityMapping:manager:error: 你会收到源实例,如何从源实例创建目标实例完全取决于你。

有一种方法可以检查给定商店是否与商店协调器模型兼容:-[NSManagedObjectModel isConfiguration:compatibleWithStoreMetadata:]

【讨论】:

以上是关于核心数据版本控制和迁移的主要内容,如果未能解决你的问题,请参考以下文章

核心数据版本控制(轻量级迁移)问题

核心数据版本控制 - 需要多个映射模型

CoreData 版本控制和阻塞轻量级迁移

核心数据:何时启用轻量级迁移?

数据库迁移脚本和带有时间戳的版本控制

NodeJS 应用程序数据库版本控制和数据迁移