2011-12-20 46 views
1

在不久的将来,我将为WP7应用添加一些功能。如所见here,我将对数据库进行一些更改。在哪里以及如何处理代码中的这种更新?我不认为有什么方法可以在任何地方添加代码,而不是在“更新”上运行。它被硬编入应用程序代码。为Windows Phone部署更新时管理内部更改

我正想着在IsolatedStorage中设置一个标志。将其命名为v1.2UpgradeFlag,并将其设置为false。在App.xaml.cs中,检查该标志,如果该标志为假,意味着升级未运行,请运行一些代码集并更新标志。

让代码坐在那里这样的想法,可能不适用于多个版本之前的一种笨重。

编辑:我也很好奇我将如何管理应用程序的累积更新。所以在v1.2中,我有一些更新数据库模式的代码。如果有人在v1.3下购买应用程序会怎么样?我不希望他们'获得'v1.1,让应用运行1.2升级代码,以达到v1.3。

回答

2

由于这是您第一次运行数据库升级,因此我会试图向将容纳版本信息的模式添加额外的表。如果在尝试检索数据时发生NotFound错误,则需要运行升级。这样,您可以在后续版本中管理进程,而无需管理额外的文件。

为了完成累积更新,您可以使用相同的机制。可以认为,从V1到V1.2更新数据库的方法,另一种方法,从1.2到1.3,等维护升级过程中可能看起来像这样的伪代码的方法...

var currentDbVersion = GetDbVersion(); 
while(currentDbVersion < currentCodeVersion) 
{ 
    switch(currentDbVersion) 
    { 
     case 1.2: 
      RunUpgradeFrom12to13(); 
      break; 
     case 1.3: 
      RunUpgradeFrom12to13(); 
      break; 
     default: 
      break; 
    } 
    currentDbVersion = GetDbVersion(); 
} 

这应该允许你从任何以前的版本升级到当前没有维护几个代码路径(因为1.0到1.2升级永远不会改变,你应该有一个已知的起始位置为每个累积步骤)

有可能会在那里有更明智的想法,但这是我首先想到的。

+0

我意识到这不是什么OP之后,但这样做将允许跳过版本的用户升级到最新版本,而无需维护UpgradeFrom10ToLatest(),UpgradeFrom12ToLatest()等方法。 – ZombieSheep 2011-12-20 17:36:28

+0

这似乎与我的想法类似。我喜欢'UpdateFromXToLatest()'的想法。我将不得不多想一点,以便我能够做到这一点,但是这使我朝着正确的方向前进。谢谢 – 2011-12-20 19:06:43

+0

在OP链接到的其他文章中,我偶然发现了这个链接:http://msdn.microsoft.com/en-us/library/hh394022(v=vs.92).aspx。这提供了您建议的确切场景。我直观地需要查看此链接中的示例,以了解如何进行多版本更改。现在更简单:) – 2011-12-21 02:16:07