EF Code First 團隊環境下工作方式規範
為了實現資料庫自動遷移,需要在Package Manager Console 輸入 Enable-Migrations –EnableAutomaticMigrations
這個命令添加了一個Migrations資料夾到工程裡, 並且資料夾裡包含一個Configuration類。我們可以在Configuration類裡配置遷移的行為,以及初始化一些出廠資料, 並且啟用自動遷移等。
下面有2個命令必須要熟悉:
Add-Migration : 會搭好基於我們在class中做的變更的遷移支架。
Update-Database: 會應用任何更改到資料庫中。
我們應該儘量避免主動呼叫Add-Migration命令,應該讓Code First遷移自動計算並應用變更。(即EnableAutomaticMigrations, 有個侷限:當發生屬性或者列頭更改命名,或者移動資料到另外的表中時,自動遷移不適用)
理論上如果產品從來沒有釋出給客戶, 其他各開發者也沒有自己的資料庫資料需要遷移,我們應該不需要執行Add-Migration
上面的操作需要在DbMigrationsConfiguration 類中開啟AutomaticMigrationsEnabled 開關, 然後每次DBA更新資料庫的code 定義時, 使用者只要獲取最新程式碼, 然後在Package manager console上只執行update-database即可。
每一次資料庫變更, 如果產品已經發布給客戶, 並且自動遷移不適用, 那DBA需要在Package Manager Console中執行Add-Migration命令,migration命名規範為此次變更的內容, 然後建立遷移code,
EF CodeFirst 團隊協作開發規範
場景1:團隊中1人負責DB開發,其他人只使用。
DB開發者:利用EF的migration機制,在產品沒有釋出之前,工程中不應該有Migrations程式碼,因為這些開發期的遷移程式碼對客戶沒有意義,還會增加效能和質量問題;當產品釋出之後,每一次迭代釋出時的資料庫變更,都應該寫遷移邏輯。
遷移邏輯分為2種情況:
-
當有列頭或者屬性名字被更改,或資料從一個表遷移到另一個表時,應該主動寫migration程式碼,具體為在Package Manager Console裡執行Add-Migration <name>, 其中<name>為此次變更的描述,必須取值為有意義的名字, 比如Add-Migration ChangeIdToPatientId。然後測試生成的migration的cs檔案,確保遷移邏輯ok。
-
其他情況下,建議用EF的自動遷移功能, 即在Configuration類中開啟AutomaticMigrationsEnabled開關。
其他使用者:
從原始碼倉庫中獲取最新的資料庫定義cs程式碼, 然後在Package Manager Console中執行update-Database即可。 使用者不需要執行Add-Migration命令。如果出現執行錯誤,在workbench或者其他資料庫客戶端管理軟體中把該資料庫schema刪除掉,重新執行update-Database即可。
場景2:團隊中多人負責DB開發,其他人使用。
DB開發者之間的協作:
本地開發時和場景1類似,定義好資料庫欄位並生成對應Migration程式碼後,在提交的時候注意看看有沒有其他DB開發者提交了程式碼。具體來說就是check in的時候如果發現有merge操作,說明有別的DB開發者提交了程式碼。Merge好資料庫定義檔案和其他DB開發者提交的Migration之後,執行一次Update-Database命令,
若出現如下warning:
則說明最後一次的遷移程式碼邏輯和當前資料庫定義並不匹配,
解決辦法是:建立一個空的遷移程式碼,資料庫並沒有變更欄位,只是為了讓遷移程式碼和資料庫一致。 具體為Add-Migration <name> -IgnoreChanges, 比如:Add-Migration MergePatientID&UserID –IgnoreChanges. 之後再呼叫Update-Database同步資料庫即可。
其他使用者:
和場景1中使用者一樣,參考上文即可。