Visual Studio одним щелчком мыши опубликовать переопределение LocalDatabase

У меня есть проект, над которым я работаю в C#, с локальной базой данных, которую я хочу опубликовать.
Проблема в том, что каждый раз, когда я публикую новую версию программного обеспечения, база данных перезаписывается, и я теряю все данные. Как настроить проект так, чтобы локальная база данных не перезаписывалась?

2 ответа

Выберите файл.mfd в обозревателе решений, затем выберите "Свойства"> "Дополнительно"> "Копировать в выходной каталог" и выберите "Копировать, если новее". Это сделает вашу базу данных перезаписанной, только если вы внесете изменения в базу данных во время разработки.

введите описание изображения здесь

Насколько я понимаю, ваша локальная база данных - это файл, который входит в ваш пакет развертывания. Исходя из этого:

Правильный путь

От версии к версии вам может понадобиться изменить структуру базы данных или расширить ее новыми функциями. Итак, я предлагаю исключить файл локальной базы данных из пакета развертывания. Вместо копирования файла базы данных используйте сценарии для создания базы данных:

  1. Подготовьте сценарии SQL, которые создают базу данных (возможно, они у вас уже есть, поскольку база данных готова). Такой скрипт должен создавать базу данных, если она не существует, изменять хранимые процедуры, обновлять таблицы при необходимости и т. Д.
  2. Если у вас есть данные по умолчанию, это должно идти с базой данных - вы можете просто вставить их с помощью скриптов. Если ваша исходная база данных велика и вы не хотите писать сценарии вставки - включите исходную базу данных в пакет развертывания с именем, отличным от вашей активной базы данных (например, database.initial.ext), и переименуйте ее вручную в вашей активной базе данных (для пример database.ext) при запуске приложения, если такой базы не существует.
  3. При запуске приложения запустите все скрипты, которые создают / обновляют вашу базу данных.
  4. Продолжайте выполнение вашего приложения.

В результате у вас должно получиться что-то вроде этого (пример):

public static void Main(object[] args)
{
    CreateDatabaseIfNotExists();
    RunDatabaseUpdateQueries();
    InsertInitialDataIfDatabaseNew();
    // Rest of your code...
}

Плюсы: вы получите гибкое решение, которое может изменить вашу базу данных при доставке новых версий.Минусы: вам нужно написать сценарии обновления и запустить их при запуске приложения.

Временное решение

В качестве альтернативы предложенному потоку вы можете просто сделать следующее:

  1. Включите файл базы данных в пакет развертывания с другим именем (например, database.initial.ext).
  2. При запуске приложения переименуйте файл базы данных, чтобы исправить его (например, database.ext), если он не существует.

В результате у вас должно получиться что-то вроде этого (пример):

public static void Main(object[] args)
{
    CreateDatabaseIfNotExists();
    // Rest of your code...
}

Плюсы: вам не нужно прилагать усилия для реализации такого потока.

Минусы: решение не является гибким, и вы столкнетесь с проблемами в случае, если структура базы данных будет обновлена ​​в будущих версиях.

Другие вопросы по тегам