Как удалить таблицу с помощью DBAccess iOS ORM
Мы планируем использовать DBAccess с нашим приложением для iOS. Мы не могли найти способ отбросить стол во время работы приложения.
Наш фактический вариант использования - выяснить, когда обновляется БД, а затем удалить или изменить некоторые таблицы. DBAccess также не дает номер версии для БД.
1 ответ
На этот вопрос немного запутанный ответ, но здесь идет:
Как мы можем на самом деле удалить таблицу с DBAccess?
Очень короткий ответ, вы не можете напрямую. Чтобы объяснить это немного дальше, мы использовали для удаления всех таблиц, которые не были получены из DBObject
учебный класс. Это вызвало возмущение и ненависть среди наших пользователей, которые, как мы узнали, использовали DBAccess
но в существующих базах данных или предварительно заполненных файлах некоторые таблицы не использовались в качестве классов, а использовались для подзапросов и тому подобного. Таким образом, мы удалили эту функцию, что, по-видимому, было бы как минимум 50/50 разногласия.
Вы можете выполнить команды SQL для непосредственного удаления неиспользуемых таблиц, если хотите, просто добавьте эту категорию и заполните свои ботинки, просто передайте nil для имени базы данных.
@interface DBAccess (execSQL)
+(void)executeSQL:(NSString*)sql inDatabase:(NSString*)dbName;
@end
Однако оба пункта 1 и 2 как бы связаны с следующей "особенностью". У нас есть система ревизий, встроенная в DBAccess
включить миграцию и обновления. Он остался скрытым, потому что его довольно трудоемко использовать, и мы планируем гораздо лучший и основанный на графическом интерфейсе редактор для использования в будущем. Но два вызова метода, которые вы можете добавить к своим объектам:
+ (void)setRevision:(int)revision
+ (void)entityAtRevision:(int)revision
Ваша сущность будет вызвана на entityAtRevision:
с текущей ревизией объекта, и вы можете использовать executeSQL:
метод внесения изменений в существующие данные. Важно отметить, что этот метод вызывается, когда добавляется новый / переименованный столбец, но до удаления исходного столбца, чтобы существующие данные были там готовы. Но прежде чем выйти из этого метода, вы должны вызвать setRevision:
с новым номером ревизии.
Как я уже сказал, это не было опубликовано, потому что мы хотим разработать намного лучшую реализацию (даже если базовая модель останется прежней), так как это довольно очевидное слабое место для фреймворка.
Надеюсь, это поможет, Адриан