Добавление атрибута к объекту в Базовых Данных

Я не думаю эти виды библиотек (которые действуют как расширения языка), вероятно, получат широкое принятие, но они - забава играть с и могут быть действительно полезны для малочисленных команд, работающих в определенных доменах, где это полезно. Например, если Вы пишете тонны 'бизнес-правил/логики', который делает произвольные проверки печатания как это и этажерка, я вижу, как это было бы удобно.

у меня нет подсказки, если это, когда-либо, вероятно, будет функцией языка C# (кажется сомнительным, но кто видит будущее?).

Для ссылки, соответствующий F# приблизительно:

let getRentPrice (v : Vehicle) = 
    match v with
    | :? Motorcycle as bike -> 100 + bike.Cylinders * 10
    | :? Bicycle -> 30
    | :? Car as car when car.EngineType = Diesel -> 220 + car.Doors * 20
    | :? Car as car when car.EngineType = Gasoline -> 200 + car.Doors * 20
    | _ -> failwith "blah"

принятие Вы определили иерархию классов вроде

type Vehicle() = class end

type Motorcycle(cyl : int) = 
    inherit Vehicle()
    member this.Cylinders = cyl

type Bicycle() = inherit Vehicle()

type EngineType = Diesel | Gasoline

type Car(engType : EngineType, doors : int) = 
    inherit Vehicle()
    member this.EngineType = engType
    member this.Doors = doors
7
задан Coocoo4Cocoa 3 August 2009 в 05:14
поделиться

3 ответа

Как точки сурка Out, для сложных изменений вашей модели данных вам потребуется создать версии вашей модели и перенести данные из старой модели в новую, следуя руководству Apple по этому вопросу (на которое он ссылается). Не беспокойтесь о каком-либо скрытом SQL, Core Data сделает это за вас.

Однако для простых изменений модели данных Apple представила новую функцию в реализации Core Data в iPhone OS 3.0, которая называется облегченная миграция . Для легкой миграции Основные данные автоматически переносятся между простыми изменениями в вашей модели данных, такими как изменение имени атрибута или сущности, удаление атрибута, добавление атрибута со значением по умолчанию или изменение наследования сущности. Вам просто нужно ввести идентификатор переименования в новой версии, чтобы указать на имя старой версии для чего-либо и т. Д. Core Data будет эффективно обрабатывать обновления ваших данных, если вы установите параметры NSMigratePersistentStoresAutomaticallyOption и NSInferMappingModelAutomaticallyOption на постоянный магазин.

10
ответ дан 6 December 2019 в 10:02
поделиться

Если вы имеете в виду «могу ли я изменить мою xcdatamodel и просто объединить изменения из сгенерированного кода в мой существующий код для классов, производных от NSManagedObject», то да, это просто. Вы просто генерируете код для моделей, которые изменились, а затем вручную объединяете изменения в эти конкретные производные классы. Поскольку изменения кажутся просто дополнительными атрибутами и связями, это должно быть тривиально - на самом деле, вы, вероятно, можете использовать diff и patch, чтобы сделать это полуавтоматически, если ваши изменения действительно аддитивны по своей природе.

Однако, если вы имеете в виду, что вам нужно перенести существующее хранилище на новую схему, у вас впереди есть работа. Существуют определенные условия (добавление ортогональных сущностей, извлеченные свойства и т. Д.), Которые не заставят вас делать это. Вы поймете, нужно вам это или нет, когда попытаетесь добавить существующие постоянные хранилища в координатор постоянного хранилища для вашего контекста управляемого объекта.

Прежде чем вы решите приступить к изменению схемы, вы всегда должны читать, как выполнить миграцию и управление версиями в Core Data - если у вас есть существующие хранилища, вам необходимо их сохранить. Это почти наверняка касается приложений, в которых пользовательские данные хранятся в хранилищах Core Data. И если у вас нет инструмента автоматического импорта или утилиты для создания хранилищ данных, ваши существующие статические хранилища также, вероятно, потребуют переноса.

вы всегда должны читать о том, как выполнять миграцию и управление версиями в Core Data - если у вас есть существующие хранилища, вам необходимо их сохранить. Это почти наверняка касается приложений, в которых пользовательские данные хранятся в хранилищах Core Data. И если у вас нет инструмента автоматического импорта или утилиты создания хранилища данных, ваши существующие статические хранилища также, вероятно, потребуют переноса.

вы всегда должны читать о том, как выполнять миграцию и управление версиями в Core Data - если у вас есть существующие хранилища, вам необходимо их сохранить. Это почти наверняка касается приложений, в которых пользовательские данные хранятся в хранилищах Core Data. И если у вас нет инструмента автоматического импорта или утилиты для создания хранилищ данных, ваши существующие статические хранилища также, вероятно, потребуют переноса.

9
ответ дан 6 December 2019 в 10:02
поделиться

Вам также следует проверить шаблоны дизайна Generation Gap. Это поможет вам именно в этой ситуации. Здесь вопрос SO об использовании разрыва поколений с CoreData.

0
ответ дан 6 December 2019 в 10:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: