將 FluentMigrator 與現有數據庫一起使用
我正在尋找一個遷移框架,該框架將與使用 .NetTiers 的現有項目一起使用,這是一種較舊的 ORM,需要 CodeSmith 生成數據訪問程式碼。
我們有一些roundhouse的經驗,並且我們已經成功地使用了它。在 Octopus Deploy 之外執行部署時,我們還能夠自動部署架構更改。相當簡單,因為它只是 SQL 腳本的集合。
我一直對遷移到 FluentMigrator 很感興趣。我喜歡 FM DSL,我發現這個 SO 問題非常有用,但是有幾件事我不明白:
- 導入現有數據庫模式的正確方法是什麼$$ * $$?
- 將遷移部署到生產環境的正確方法是什麼$$ ** $$?
$$ * $$我的假設是我使用 SQL Server 工俱生成單個腳本並使用 ExecuteEmbeddedSql 作為初始遷移。那是對的嗎? $$ ** $$執行遷移似乎有三種主要方法(命令行、NAnt 執行器、MSBuild 執行器)。他們需要訪問數據庫才能執行。想像一下,我們想將它部署到 PROD 環境。開發人員和建構伺服器無法訪問此環境。您如何針對該環境執行這些跑步者? 我們通常的部署過程是生成一組 SQL 腳本,這些腳本需要作為部署的一部分進行部署。Ops 將這些作為部署的一部分執行,或者作為 Octopus 部署過程 (powershell) 的一部分自動執行,或者如果部署在 Octopus 之外,則手動執行。
我們在這個特定項目中遇到的一個複雜問題是 .NetTiers。這意味著我們必須使用 .NetTiers 執行 CodeSmith 程式碼生成來建構數據訪問層,然後才能針對這些實體和數據服務進行編碼。因此,我們的工作流程必須是:
- 寫遷移
- 執行遷移以升級數據庫(針對特定的 .NetTiers 數據庫)
- 針對特定的 .NetTiers 數據庫(中央建構伺服器)執行 .NetTiers
- 針對新 .NetTiers 生成的實體、數據庫欄位等的程式碼
我很想轉儲 .NetTiers,但遺憾的是,重構目前不是一個可行的選擇。
我終於解決了這個問題。我的大部分問題都與對 FluentMigrator 缺乏了解有關。我會一一挑選出我原來的問題。
導入現有數據庫模式的正確方法是什麼?
我找不到“正確的方法”,但我可以找到適合我的方法!我做出了以下核心決定:
- 我將整個數據庫編寫為基線。我包括了所有表、過程、約束、視圖、索引等。我將我的第一次迭代設置為基線。我選擇了沒有 DROP 的 CREATE 選項。這將是我的遷移。
- 我執行了相同的腳本轉儲,但只選擇了 DROP。這將是我的遷移。
基線遷移只需要使用
EmbeddedScript方法來執行附加的腳本(我也將腳本組織到迭代文件夾中)。[Tags(Environments.DEV, Environments.TIERS, Environments.CI, Environments.TEST)] [Migration(201403061552)] public class Baseline : Migration { public override void Up() { this.Execute.EmbeddedScript("BaselineUp.sql"); } public override void Down() { this.Execute.EmbeddedScript("BaselineDown.sql"); } }基線解決…
如何處理 .NetTiers
好的,這有點挑戰。我創建了一個特定的 .NetTiers 數據庫,我將使用它來執行 .NetTiers 程式碼生成。在 FluentMigrator 中,您可以“標記”遷移。我決定根據環境進行標記。因此,我有一個“tiers”標籤以及“dev”、“test”、“uat”、“prod”等標籤。這些如何執行將在稍後進行。
在進行架構更改時,我會創建遷移並使用標籤“層”來關注 .NetTiers 架構更改。然後,我使用該特定標記作為標誌從Visual Studio 外部工具中執行migrate.exe。與我的機器名稱匹配的 app.config 數據庫連接將是使用的數據庫連接,因此我將其指向 tiers 數據庫。現在我的 migrate up 已經執行了,我的 .NetTiers 源數據庫已經準備好了。我現在可以執行 .NetTiers Codesmith 程式碼生成工具來生成新的 DLL。
.NetTiers 解決了…
將遷移部署到生產環境的正確方法是什麼?
我正在使用 Octopus Deploy,老實說,如果您正在部署 .NET 應用程序,尤其是部署到多台伺服器,這應該是您這樣做的絕對首選工具!
我不會詳細介紹 Octopus Deploy,但在基本層面上,您可以將 TeamCity 和 Octopus deploy 連接在一起。OD 提供兩個項目來幫助您前進。
- 一個名為 Octopack 的程序,它將您的應用程序包裝為 NuGet 包。
- 一個 TeamCity 外掛,它使 TeamCity 建構 NuGet 包並將其作為在 NuGet 源上公開的工件提供。
Octopus Deploy 然後使用該 NuGet 源並將這些包部署到端點伺服器。此部署過程的一部分是執行 PreDeploy 和 PostDeploy Powershell 腳本。在這裡,我將使用我的特定標籤執行 migrate.exe 應用程序。
部署解決…