我已经部署了一个C#应用程序,我的客户可以通过ClickOnce更新从新部署的版本中受益。
但是当我更改应用程序数据库架构时遇到麻烦,因为客户无法从自动更新数据库更改中受益,请给我解决方案如何让客户应用程序检查新版本的DB是否可用然后执行更新
所以有两个问题:
答案 0 :(得分:2)
我假设每个用户都拥有自己的数据库。在这种情况下,您可以执行以下操作:
使用启用了“自动迁移”的实体框架:http://msdn.microsoft.com/en-us/data/jj554735.aspx。这样一旦检测到模型更改,EF将自动更新数据库。
手动编写迁移并使用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代码以更新此特定版本的应用程序的数据库。