2012-03-19 27 views
5

我很高興能夠跨越到使用DAC Fx和聲明性數據庫開發。我面臨的主要障礙是如何處理跨多個不同版本模式的複雜數據遷移。在舊世界中,我們可以簡單地按順序運行所有升級腳本,這可以確保數據遷移時模式處於正確的狀態。當升級路徑是動態時,這是如何工作的?數據層應用程序框架(DAC Fx)中的複雜數據遷移

例如,假設有在現有的情況下,我的架構(DACPAC1-4)的幾個版本:

  • DACPAC1:TableA的存在,並且有
  • DACPAC2有價值的客戶數據:表A已被棄用,取而代之tableB和規範化的tableC;添加新的 表D
    • 後部署腳本:將數據從表A移動到新表B和 tableC;降TABLEA
  • DACPAC3:表C有一個新的,可爲空columnX
    • 部署後腳本:填充基礎上提出
    • 空列
  • DACPAC4:tableC.columnX是不可爲空

如果我需要能夠支持將DACPAC1-3服務器升級到最新的DACPAC4,我現在必須以足夠聰明的方式編寫我的預部署和部署後腳本,以檢測目標上的哪個DACPAC並按順序正確處理數據遷移步驟。此外,我不能簡單地重複使用我最初編寫的天真的後期部署腳本,因爲它們依賴於模式的中間版本。

在此先感謝您的任何建議!

回答

0

我通常做的是以下幾點:

  1. 創建包含一個名爲SchemaVersion屬性的系統表。所有升級腳本都被編程爲首先檢查當前版本,然後決定是否執行其內容。執行後,它將SchemaVersion設置爲存儲在腳本中的最新版本。

  2. 我通常還包含另一個名爲MinAppVersion的屬性(與當前模式兼容的最低版本)。當應用程序嘗試連接到數據庫時,它將其當前程序集版本與存儲在數據庫中的MinAppVersion進行比較。如果版本等於或高於MinAppVersion,則建立連接,否則引發異常。

我希望這有助於。親切的問候,

相關問題