首先,你有這個標籤與Visual Studio 2012 - 如果你使用的是該版本,一定要升級到vs 2013或2015,並獲得最新版本的SSDT,因爲發佈每3個月發佈一次新功能並修復所以很值得一個更新的版本 - 我在下面談論的是當前的行爲,我不知道所有這些是否在Visual Studio 2012的原始ssdt中都可用。
有幾件事要說,首先,您可以通過使用/ p:BlockWhenDriftDetected並將數據庫註冊爲數據層應用程序(/ p:RegisterDataTierApplication)來強制進行有序部署。這將允許你這樣做:
- 構建dacpac 1
- 部署dacpac 1
- 構建dacpac 2
- 部署dacpac 2
- 構建dacpac 3
,將停止您在部署dacpac 1之前無法部署dacpac 2,但這並不理想,因爲如果您在部署dacpac 2之前構建了dacpac 3,那麼您將無法部署出於重建dacpac 3所以它不理想。
當您處理數據庫(任何rdbms,而不僅僅是sql server)的更改時,有時候我們需要分階段發佈更改,對我而言,它更像是一個流程問題,而不是技術問題。我要做的就是:
- 創建的變化
- 的第一部分中的積壓創建票完成變更
- 部署變化
- 在部署之後,將來重複,拿起門票完成更改
- 部署定稿
有些事情要注意一下:
- 這需要紀律,以確保你整理和完整的東西,在一個靈活的工作方式,並不意味着草率:)
- 所以如果你想建立一些靜態數據,你寫的應該是冪等的所有腳本等一樣,如果存在支票或MERGE語句使用的東西,如果你修改任何架構對象包起來是否存在等如果你這樣做,你會發現部署更簡單的體驗
如果按照這個過程而不是依賴版本策略類型的策略,那麼您不必擔心部署dacpacs的順序,如果腳本很重要,請將其保留在post部署腳本中,並在執行腳本之前檢查腳本是否應該做任何工作。如果您的腳本變得太大,您可以使用:•sqlcmd導入將它們分成不同的文件。我也聽說過使用部署存儲過程並從部署後腳本調用這些過程的人員。
我更喜歡一個只需部署dacpac的最新(或特定版本)的進程,因爲這意味着無論您是要進行後期構建還是回退到之前的構建,都可以始終部署到該版本。
最後,在添加不可空的fk列的示例中,可以通過一次部署dacpac來完成此操作。要做到這一點,你會:
- 創建新的表定義(包括非空和外鍵約束)
- 在您的文章部署腳本在桌子上做一個更新,使其樹立正確的數據(顯然使它冪等,因此它可以留在永遠如果需要的話)
- 當你部署啓用/ p:GenerateSmartDefaults
會發生什麼事時,所產生的部署腳本是你得到一個腳本,看起來像:
- 預先部署腳本(如果有的話)
- 列創建一個臨時默認約束不爲空
- 刪除臨時約束
- 創建NOCHECK外鍵,所以它不是真正enfored
- 運行後部署腳本
- 啓用使用「與檢查檢查」
的/ p的外鍵約束:我彪參數的東西ioned是您傳遞給sqlpackage.exe的參數。如果您不使用該功能,但使用其他方式進行部署,則通常可以將這些參數作爲參數傳遞給您,如果您讓我知道您在部署時如何部署,我可以幫助您。有關參數的描述,請參見https://msdn.microsoft.com/en-us/library/hh550080.aspx(sqlpackage.exe命令行語法)。
讓我知道如果您有任何問題,還有一些額外的事情需要考慮,但檢查模式定義並自動生成部署腳本會大大減少部署更改的工作量,這意味着您可以專注於更有用的事情 - 編寫一個單元測試:)。
Ed
你看過Ready-Roll? http://www.ready-roll.com/這是RedGate與Visual Studio集成的一個工具。我認爲這是你以後的樣子。 –
由於您詢問了其他項目類型,請查看[使用遷移的實體框架7](https://channel9.msdn.com/Blogs/Seth-Juarez/Migrations-in-Entity-Framework-7-與-布萊斯-LAMBSON) –