Основные данные и кумулятивные облегченные миграции

Я успешно создал версию своей основной модели данных для будущей версии 1.1 моего приложения, используя упрощенную миграцию. У меня есть вопрос о ремонтопригодности этого подхода.

Если я снова переделаю свою модель в версии 1.2 своего приложения, а пользователь обновит ее с версии 1.0 до 1.2, будут ли две миграции успешно применены последовательно? То есть, если я оставлю версии модели, будут ли миграции кумулятивными?


person Ben Packard    schedule 25.11.2012    source источник


Ответы (1)


Если обе миграции легкие, нет необходимости применять их последовательно. Поскольку облегченные миграции могут выполняться :

  • Простое добавление нового атрибута
  • Удаление атрибута
  • Необязательный атрибут становится необязательным
  • Необязательный атрибут становится необязательным и определяет значение по умолчанию.
  • Переименование объекта или свойства

В последнем случае вы указываете имя, используемое в магазине («каноническое имя»). Это имя свойства по умолчанию, так что в конечном итоге это свойство будет называться в первой версии вашей модели данных. Затем вы можете произвольно изменить имя свойства, оставив только каноническое имя.

Таким образом, чистый эффект заключается в том, что не существует последовательности событий, в которой Core Data может понять, как перейти с версии 1 на версию 2 и с версии 2 на версию 3, но не напрямую с версии 1 на версию 3.

И наоборот, если вы укажете сопоставления вручную с помощью модели сопоставления, вам придется либо написать код для совокупного применения всех сопоставлений вручную, либо предоставить сопоставления O (n ^ 2) по мере развития вашей модели данных.

person Tommy    schedule 25.11.2012
comment
Я нервничал из-за части «вывода» облегченной миграции — я могу подтвердить, что основные данные способны правильно вывести отображение 1.0->1.1, а затем и отображение 1.1->1.2, но обязательно ли это означает, что они смогут вывести отображение 1.0->1.2, если отображения не выполняются последовательно? Кажется, вы говорите, что всегда сможете сделать правильный вывод - просто хочу убедиться. - person Ben Packard; 26.11.2012
comment
Мое чтение документации, безусловно, так и должно быть. Предположим, что ваш магазин — это SQL. Apple пытается сказать вам, что автоматическая миграция может обнаружить все, что просто добавляет или удаляет столбцы или таблицы (и будет выполнять эти действия непосредственно в существующем магазине). Переименование объекта не меняет имя столбца, если вы сохраняете каноническое имя, а другие свойства — это просто внутренняя бухгалтерия. Таким образом, вы обычно можете быть уверены, что разница между двумя версиями будет заключаться только в добавлении или удалении таблицы и столбца, если резервным хранилищем будет SQL. - person Tommy; 26.11.2012
comment
Если вы удалите свойство в версии 1.1, а затем добавите его обратно в версию 1.2, основные данные не коснутся его из версии 1.0 -> версии 1.2, поэтому у вас могут быть некоторые неожиданные данные;) - person trapper; 05.10.2016