2011-12-20 81 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