自动更新SQL Server数据库架构

时间:2013-11-27 10:13:17

标签: c# sql-server clickonce database-schema auto-update

我已经部署了一个C#应用程序,我的客户可以通过ClickOnce更新从新部署的版本中受益。

但是当我更改应用程序数据库架构时遇到麻烦,因为客户无法从自动更新数据库更改中受益,请给我解决方案如何让客户应用程序检查新版本的DB是否可用然后执行更新

所以有两个问题:

  1. 客户应用如何检查数据库架构新版本?
  2. 如何执行更新,避免丢失客户数据只是更新架构?

1 个答案:

答案 0 :(得分:2)

我假设每个用户都拥有自己的数据库。在这种情况下,您可以执行以下操作:

  1. 使用启用了“自动迁移”的实体框架:http://msdn.microsoft.com/en-us/data/jj554735.aspx。这样一旦检测到模型更改,EF将自动更新数据库。

  2. 手动编写迁移并使用ClickOnce IsFirstRun功能检测第一次执行新版本的应用程序 - 然后您可以编写如下内容:

  3. 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代码以更新此特定版本的应用程序的数据库。