在this question中,我遇到了一個問題,我正在爲部署的應用程序編寫更新,以使數據庫與我們正在部署的較新版本保持同步。基本輪廓如下:預期的數據庫模型實時不一致
- 開始與應用程序的當前部署版本
是使用現有的數據庫- 增加了新的數據庫表和關係
是依賴於新- 增加了新的功能
- 的新增功能數據庫結構
- 測試完成,準備部署
這裏的問題是,目前部署的應用程序已經使用了幾個月,並且需要保存大量數據,因此只需更換舊版本並不可行(至少不適用於數據庫,但它當然適用於代碼)。因此,我使用以下步驟在SQL中編寫腳本以獲取應用程序的更新版本,以便在第一次啓動時對數據庫進行必要的更改而不觸及現有數據(除填充新表格外):
- 使用VS2010的「生成模型數據庫」功能來創建一個.SQL
- 刪除關於該法案的.SQL的所有部件(模型用的是「生成數據庫模式」功能的最初創建)現有表格,除了在新舊錶格之間添加FK的表格外
- 使用生成的腳本構建新的數據庫
聽起來很乾淨,做對吧?錯誤。新表格從模型到數據庫的映射都是錯誤的。長話短說,生成模型的數據庫具有以複數形式命名的表(並且映射是正確的並且應用程序工作),並且由模型生成的數據庫以複數形式創建表(與DB所在的表相同的名稱生成模型,但該模型沒有映射到它們)。解決方案最終是改變腳本以單數命名錶,然後一切都完美無缺。
這裏發生了什麼事?代碼保持不變,沒有變化的模型製作,和舊錶繼續正常工作的全部時間,但在
- 過程某處生成腳本
- 刪除「新」表和約束(那些還沒有在部署的版本存在)
- 運行腳本,重新添加表
映射決定是單獨命名錶(用戶插件用戶的tead,地址而不是地址等)。
任何人都可以向我解釋如何/爲什麼會發生這種情況?