2013-11-27 6 views
2

Я развернул приложение C#, а мои клиенты получили преимущества от новых развернутых версий с помощью обновления ClickOnce.Автоматическое обновление схемы базы данных SQL Server

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

Таким образом, есть две проблемы:

  1. как же проверить приложение клиент для DB схемы новой версии?
  2. Как выполнить обновление, чтобы избежать потери данных клиента, просто обновите схему?
+0

Какую технологию вы используете для доступа к базе данных? Какие изменения схемы вы планируете применить? Какую базу данных вы используете? – Dennis

+1

Это sql DB (sql server 2008 r2). Я имею в виду изменение названия поля или добавление новых таблиц, хранимых proc ... –

+0

@Dennis любое решение plz –

ответ

2

Я предполагаю, что у каждого пользователя есть своя база данных. В этом случае вы можете сделать следующее:

  1. использовать Entity Framework с "авто миграции" Enabled: http://msdn.microsoft.com/en-us/data/jj554735.aspx. Таким образом, как только будет обнаружено изменение модели, EF автоматически обновит базу данных.

  2. Запись миграции вручную и использовать ClickOnce IsFirstRun функцию для обнаружения в первый раз, когда была выполнена новая версия приложения - и тогда вы можете написать что-то вроде этого:

public void MigrateData() 
{ 
    if (ApplicationDeployment.IsNetworkDeployed) 
    { 
     if (ApplicationDeployment.CurrentDeployment.IsFirstRun) 
     { 
      try 
      { 
       NS.Logic.DAL.EventDataAccessor.Create().MigrateFromPreviousVersion(); 
       NS.Logic.DAL.UserDataAccessor.Create().MigrateFromPreviousVersion(); 
       // and do the same for all affected accessors 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Could not migrate data from previous version. Please contact the developer.", 
        "My app", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
     } 
    } 
} 

и то для каждого аксессора в MigrateFromPreviousVersion() вы пишете свой собственный код SQL для обновления базы данных для этой конкретной версии приложения.

+0

как насчет хранимой процедуры, просмотров, триггеров ??? –

+0

Возможно ли обновить sql db от MainDATASET.xsd в C#? –

+0

вам нужно создать SQL-код, который выполняет миграцию (т. Е. «СОЗДАТЬ ПРОЦЕДУРУ ...» и т. Д.) И выполнить ее внутри вызова «MigrateFromPreviousVersion()». Если вы используете ADO.Net - этот пост может помочь вам: http://stackoverflow.com/a/1190832/1246870 – avs099

Смежные вопросы