Visual Studio одним щелчком мыши опубликовать переопределение LocalDatabase
У меня есть проект, над которым я работаю в C#, с локальной базой данных, которую я хочу опубликовать.
Проблема в том, что каждый раз, когда я публикую новую версию программного обеспечения, база данных перезаписывается, и я теряю все данные. Как настроить проект так, чтобы локальная база данных не перезаписывалась?
2 ответа
Выберите файл.mfd в обозревателе решений, затем выберите "Свойства"> "Дополнительно"> "Копировать в выходной каталог" и выберите "Копировать, если новее". Это сделает вашу базу данных перезаписанной, только если вы внесете изменения в базу данных во время разработки.
Насколько я понимаю, ваша локальная база данных - это файл, который входит в ваш пакет развертывания. Исходя из этого:
Правильный путь
От версии к версии вам может понадобиться изменить структуру базы данных или расширить ее новыми функциями. Итак, я предлагаю исключить файл локальной базы данных из пакета развертывания. Вместо копирования файла базы данных используйте сценарии для создания базы данных:
- Подготовьте сценарии SQL, которые создают базу данных (возможно, они у вас уже есть, поскольку база данных готова). Такой скрипт должен создавать базу данных, если она не существует, изменять хранимые процедуры, обновлять таблицы при необходимости и т. Д.
- Если у вас есть данные по умолчанию, это должно идти с базой данных - вы можете просто вставить их с помощью скриптов. Если ваша исходная база данных велика и вы не хотите писать сценарии вставки - включите исходную базу данных в пакет развертывания с именем, отличным от вашей активной базы данных (например, database.initial.ext), и переименуйте ее вручную в вашей активной базе данных (для пример database.ext) при запуске приложения, если такой базы не существует.
- При запуске приложения запустите все скрипты, которые создают / обновляют вашу базу данных.
- Продолжайте выполнение вашего приложения.
В результате у вас должно получиться что-то вроде этого (пример):
public static void Main(object[] args)
{
CreateDatabaseIfNotExists();
RunDatabaseUpdateQueries();
InsertInitialDataIfDatabaseNew();
// Rest of your code...
}
Плюсы: вы получите гибкое решение, которое может изменить вашу базу данных при доставке новых версий.Минусы: вам нужно написать сценарии обновления и запустить их при запуске приложения.
Временное решение
В качестве альтернативы предложенному потоку вы можете просто сделать следующее:
- Включите файл базы данных в пакет развертывания с другим именем (например, database.initial.ext).
- При запуске приложения переименуйте файл базы данных, чтобы исправить его (например, database.ext), если он не существует.
В результате у вас должно получиться что-то вроде этого (пример):
public static void Main(object[] args)
{
CreateDatabaseIfNotExists();
// Rest of your code...
}
Плюсы: вам не нужно прилагать усилия для реализации такого потока.
Минусы: решение не является гибким, и вы столкнетесь с проблемами в случае, если структура базы данных будет обновлена в будущих версиях.