У меня есть надежное приложение ClickOnce, которое также использует SQL Server Express на компьютере конечного пользователя.В нашем случае синхронизация схемы локальной базы данных осуществляется на нашем веб-сервере.
После запуска приложения информация о версии извлекается из текущей клиентской базы данных (с версией «0», возвращаемой, если БДне существует), а затем веб-служба возвращает необходимые файлы сценариев для создания локальной базы данных.Затем приложение ClickOnce выполняет сценарии в последовательном порядке, и схема базы данных создается идеально, независимо от того, когда в последний раз пользователь запускал приложение.
После обновления локальной схемы любые данные, которыепользователю необходим доступ для повторной синхронизации с сервера.Это связано с тем, что каждый раз, когда я обновляю таблицу данных, мне приходится УБРАТЬ таблицу, а затем заново создавать ее из сценариев обновления схемы.
Если вы не хотите управлять сложным сценарием сервера / клиента / db этого типаСистема управления, почему вы не можете связать связанные сценарии SQL с вашим приложением?Это можно сделать, определив таблицу в клиентской БД, которая поддерживает текущую версию БД.Когда ваш пользователь загружает новое обновление в ваше приложение, проверьте версию БД и, в зависимости от текущей версии БД клиента, выполните доступные сценарии или команды, скомпилированные с вашим приложением.
Добавляйте только скрипты в каждую последующую публикацию вашего приложения и никогда не удаляйте старые.Новые сценарии SQL должны удалять и воссоздавать любой объект, который обновляется.Это может избавить вас от нескольких головных болей, если ваше приложение аварийно завершится в середине выполнения скрипта вашим приложением.Я усвоил этот трудный путь.
Я бы порекомендовал создать механизм синхронизации, при котором проверки версий будут управляться с вашего сервера, вместо того, чтобы иметь скрипты или встроенные команды SQL, скомпилированные с вашим приложением.Таким образом, незначительные изменения в базе данных могут быть сделаны без публикации вашего приложения.Поверьте мне, ваш пользователь поблагодарит вас за то, что ему не придется загружать частые обновления приложений.Вместо этого эти типы изменений будут плавными и будут происходить автоматически за кулисами.