2013-11-27 39 views
2

我部署了一个C#应用程序,并且我的客户受益于ClickOnce更新的新部署版本。自动更新SQL Server数据库模式

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

所以这里有两个问题:

  1. 怎么做了DB模式新版本的客户应用程序检查?
  2. 如何执行更新,避免丢失客户数据只是更新架构?
+0

您使用什么技术访问数据库?您计划应用哪些模式更改?你使用什么数据库? – Dennis

+1

这是sql数据库(sql server 2008 r2)。 我的意思是改变字段名称或添加新表格,存储过程... –

+0

@Dennis任何解决方案plz –

回答

2

我假设每个用户都有自己的数据库。在这种情况下,你可以做到以下几点:

  1. 使用实体框架启用“自动迁移”: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

是否有可能通过C#中的MainDATASET.xsd更新sql db? –

+0

您需要创建执行迁移的SQL代码(即“CREATE PROCEDURE ...”等),并在MigrateFromPreviousVersion()调用中执行它。如果您使用ADO.Net - 这篇文章可能会帮助您:http://stackoverflow.com/a/1190832/1246870 – avs099