2009-05-01 16 views
1

我已經閱讀了大量關於如何爲開發人員等升級數據庫的問題,並且我傾向於使用migratordotnet或類似的東西,但它似乎是升級需要運行MSBuild或NAnt。這些不是我應該期望的最終用戶安裝的東西。如何爲最終用戶自動升級已部署的數據庫

理想情況下,這個過程應該是用戶安裝新版本的應用程序,啓動它,它負責處理場景中的所有事物。取決於進程需要多長時間,我可能會或可能不會顯示進度條,然後完成,使用應用程序通常很幸福地沒有意識到存在諸如sql,msbuild,關係數據庫之類的東西,甚至是遠程技術性的聲音。

其他其他信息:

安裝了xcopy的SQLCE。

單用戶數據庫,最有可能不應該太大。

通過用戶對所請求的功能的輸入,該程序的演變將會相當頻繁。

初始發行尚未完成,所以 不需要擔心任何 當前數據,只需要對初始和後續 版本無痛 進程(最終用戶, 最好對我來說好!)。

使用LINQ to SQL作爲ORM。 (難道我 升級數據庫第一則
運行SQLMetal再生
類?)

做TDD(首次)和 想知道如何進行自動化測試 升級。

Visual C#Express so so VS plugins。

編輯:

我猜的MSBuild自帶.NET Framework和不只是VS,所以我想這是一個非的問題,我可以只使用migratordotnet和剛掏出來的MSBuild。如果需要的話,我可能會重定向控制檯輸出並做一些天真的字符串解析來獲取進度信息,但是如果它看起來需要足夠長的時間才能保證顯示實際進度而不僅僅是一個選取框進度條,我會採取措施。

回答

0

通常,這種東西通常是這樣做的:數據庫遷移是在安裝時完成的;在安裝過程中,您會有大量代碼(通常是完全自定義的)檢測數據庫的現有版本,並執行將數據從現有數據庫遷移到新數據庫所涉及的所有操作(即創建臨時表,複製數據從現有表格轉換爲臨時表格,刪除現有表格,創建新表格,執行連接以將數據從臨時表格添加到新表格等)。根據定義,這個過程非常複雜。我並不知道任何可以自動化專門針對最終用戶生產環境的轉換過程的工具。 (處理最終用戶數據庫通常涉及很多特殊情況。)

2

這裏有一個選項:

  1. 商店分貝版本在某處你的數據庫
  2. 在啓動時確保數據庫是在代碼數據庫版本比較恆定電流。
  3. 如果沒有當前運行一組腳本來創建/修改表,數據轉換等

如果已經部署並沒有數據庫的版本,然後只檢查模式爲你所期望的東西在最新的數據庫版本。

測試:

  1. 開始用舊的數據庫
  2. 創建於UpdateDatbaseIfNeeded()方法
  3. 如果該模式被更新的測試應該通過和數據庫版本被設置

您還可以預裝您的測試數據庫以測試需要由升級腳本處理的各種轉換問題。

0

以下是可以用Wizardby做什麼。

它有一個API,它允許您以編程方式執行數據庫模式遷移任務。你需要一個合適的IDbPlatformSqlCePlatform也在那裏),一個IMigrationVersionInfoManager,它有一個標準的實現,它存儲SchemaInfo表中的版本信息,IMigrationScriptExecutive也有默認實現,IMigrationService本身。接下來,您編寫migration definition,將其編譯到您的程序集中,並將其提供給IMigrationService.Migrate(connectionString, null, yourMigrationDefinition)

1

我想補充上面的評論的唯一的事情就是你還需要擔心一個包裝類型的操作。

要將您的應用程序從SQL CE 3.1升級到3.5,需要安裝3.5庫,然後執行打包操作以升級數據庫格式。作爲流程的一部分,您可能需要記住這一點。對於SQL CE 3.5,只需在3.5中打開數據庫將使其不再與3.1兼容 - 這意味着如果您的用戶稍後恢復了應用程序的備份或無法加載該應用程序的備份。因此,您需要在連接時捕獲這些錯誤,並確保您處理來自MS的所有例外情況,以避免版本不兼容。

3.1和3.5的另一個問題是你不能同時將它們加載到Visual Studio中。因此反覆測試這個過程意味着您可以重複擦除和升級的虛擬機。你不能在你的開發機器上做到這一點。 :(

相關問題