Использую NHibernate, SQLite. Возник вопрос, а как решается ситуация когда есть SQLite база с данными, но в новой версии программы изменилась структура. К примеру удалили/добавили поля/таблицы. Как автоматически обновить (т.е. не потерять текущие данные в существующих таблицах и полях)?
Насколько я понимаю, это важно сделать до попытки программы доступиться к "некорректной" (старой версии) базы.
Помимо этого более сложный вопрос, можно ли указать какие поля в какие переносить (ситуация переименования поля)?
Здравствуйте, Interceptor, Вы писали:
I>Использую NHibernate, SQLite. Возник вопрос, а как решается ситуация когда есть SQLite база с данными, но в новой версии программы изменилась структура. К примеру удалили/добавили поля/таблицы. Как автоматически обновить (т.е. не потерять текущие данные в существующих таблицах и полях)?
I>Помимо этого более сложный вопрос, можно ли указать какие поля в какие переносить (ситуация переименования поля)?
Вместе с обновлением программы нужно обновлять и базу (или при первом запуске новой версии программы). Например, написать скрипты, которые надо применить к старой БД, чтобы привести ее к новому виду.
Здравствуйте, Lao, Вы писали:
Lao>Вместе с обновлением программы нужно обновлять и базу (или при первом запуске новой версии программы). Например, написать скрипты, которые надо применить к старой БД, чтобы привести ее к новому виду.
К примеру у нас есть n версий базы. Писать скрипты для обновления с любой версии до текущей? Неужели в NHibernate ничего подобного не придумали? И скрипты как запускать? Через все тот же NHibernate выполняя обычные SQL запросы, или напрямую коннектиться к SQLite? Возможно у кого-то есть пример готового решения?
Здравствуйте, Interceptor, Вы писали:
I>К примеру у нас есть n версий базы. Писать скрипты для обновления с любой версии до текущей?
скрипты должны обновлять от v до v+1
I>Неужели в NHibernate ничего подобного не придумали?
какое отношение данная задача имеет к ORM?
I>И скрипты как запускать? Через все тот же NHibernate выполняя обычные SQL запросы, или напрямую коннектиться к SQLite? Возможно у кого-то есть пример готового решения?
Здравствуйте, Interceptor, Вы писали:
I>Использую NHibernate, SQLite. Возник вопрос, а как решается ситуация когда есть SQLite база с данными, но в новой версии программы изменилась структура. К примеру удалили/добавили поля/таблицы. Как автоматически обновить (т.е. не потерять текущие данные в существующих таблицах и полях)? I>Насколько я понимаю, это важно сделать до попытки программы доступиться к "некорректной" (старой версии) базы.
Есть кое какая поддержка см. описание класса NHibernate.Tool.hbm2ddl.SchemaMetadataUpdater.
Можно автоматически создавать таблицы, добавлять столбцы, и другие объекты БД, но более сложные вещи, такие как данных данных, и прочие преобразования не поддерживаются.
На мой взгляд использовать этот инструмент целесообразно только во внутренних итерациях.
I>Помимо этого более сложный вопрос, можно ли указать какие поля в какие переносить (ситуация переименования поля)?
Пожалуй, наиболее красиво и безопасно это можно сделать только при разработке в стиле "Model First" (см. например, ORM DataObjects).
Иначе к каждой новой версии нужно готовить и скрипты на апдейт базы и исполняемые модули. А потом, при запуске, проверять версии БД и программы на совместимость.