一些介紹 CodeFirst是EntityFrameworks的一種開發模式,即代碼優先,它以業務代碼為主,通過代碼來生成資料庫,並且加上migration的強大數據表比對功能來生成資料庫版本,讓程式開發人員不用維護資料庫的變更,而直接維護migration即可,在它裡面有你當前版本和過去歷史版本的 ...
一些介紹
CodeFirst是EntityFrameworks的一種開發模式,即代碼優先,它以業務代碼為主,通過代碼來生成資料庫,並且加上migration的強大數據表比對功能來生成資料庫版本,讓程式開發人員不用維護資料庫的變更,而直接維護migration即可,在它裡面有你當前版本和過去歷史版本的所有變更記錄!
大叔寫過的Migration的文章
第六十回 EF架構~CodeFirst生產環境的Migrations
開始今天的《一步一步帶您進行Migration資料庫版本控制的學習之旅》
(1)通過EF-CodeFirst自己幫我們建立了資料庫,初始化的數據表
第一次建立數據模型,運行程式,自動建立資料庫和數據表,並執行對應的初始化工作
數據模型
數據初始化
EF在LindAgile里的註冊
資料庫第一次被創建,數據表名的名稱,可以控制它的單數和複數形式
protected override void OnModelCreating(DbModelBuilder modelBuilder) { // 註意表單複數形式時,實體不能有下劃線,必須是單詞 modelBuilder.Conventions.Remove<System.Data.Entity.ModelConfiguration.Conventions.PluralizingTableNameConvention>();
}
其中__MigrationHistory表,它是數據變更的數據表,體現了資料庫的歷史
(2)開始數據遷移
這時,我們看解決方案里,沒有migrations文件夾,因為這時你沒有開啟變更計劃
當開啟變更後,才會出現這個文件夾
Enable-Migrations
然後在項目中就看到了migrations文件夾,它將存儲我們資料庫的變更記錄
我們如果新添加了數據實體DO,或者修改了原來的實體,然後希望升級一個變更記錄,可以使用add-migration 變更名(隨便寫)
然後在我們項目的Migrations目錄會多一個變更文件,它以時間戳開頭,我們在變更執行時,這個時間戳是它順序執行的關鍵
(3)把模型的變更更新到資料庫
同時,我們看一個數據表__MigrationHistory,它沒有發生變化,這是因為我們沒有把變更更新到資料庫,如果希望更新到資料庫,可以使用update-database來實現,如果不加版本號,預設更新的是最新的變更記錄,它會包括之前的變更代碼,在更新時它會與數據表__MigrationHistory里的變更記錄進行對比,如果已經更新過了,就不會執行這個版本,而只會向後更新!
執行完成後,我們再看一下數據表的變化,它也會多一條最新的變更記錄,以後我們再有數據表變更,就使用這個方法即可,EF-migration只要我們好好用,它只會使我們的開發便得更快捷!
(4)把模型的變更成SQL腳本,以便在生產環境中使用
Update-Database -Script -SourceMigration: $InitialDatabase -TargetMigration:init
上面代碼執行後會生成一個SQL文件,我們拿這個文件可以到生產環境中去執行,就完成了資料庫的更新!
希望本文對各位有所幫助!