您好,登錄后才能下訂單哦!
這篇文章給大家介紹EF架構(gòu)codeFirst從初始化到數(shù)據(jù)庫遷移的過程是怎樣的,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
CodeFirst是EntityFrameworks的一種開發(fā)模式,即代碼優(yōu)先,它以業(yè)務(wù)代碼為主,通過代碼來生成數(shù)據(jù)庫,并且加上migration的強(qiáng)大數(shù)據(jù)表比對(duì)功能來生成數(shù)據(jù)庫版本,讓程序開發(fā)人員不用維護(hù)數(shù)據(jù)庫的變更,而直接維護(hù)migration即可,在它里面有你當(dāng)前版本和過去歷史版本的所有變更記錄!
(1)通過EF-CodeFirst自己幫我們建立了數(shù)據(jù)庫,初始化的數(shù)據(jù)表
第一次建立數(shù)據(jù)模型,運(yùn)行程序,自動(dòng)建立數(shù)據(jù)庫和數(shù)據(jù)表,并執(zhí)行對(duì)應(yīng)的初始化工作
數(shù)據(jù)模型
數(shù)據(jù)初始化
EF在LindAgile里的注冊(cè)
數(shù)據(jù)庫第一次被創(chuàng)建,數(shù)據(jù)表名的名稱,可以控制它的單數(shù)和復(fù)數(shù)形式
protected override void OnModelCreating(DbModelBuilder modelBuilder) { // 注意表單復(fù)數(shù)形式時(shí),實(shí)體不能有下劃線,必須是單詞 modelBuilder.Conventions.Remove<System.Data.Entity.ModelConfiguration.Conventions.PluralizingTableNameConvention>(); }
其中__MigrationHistory表,它是數(shù)據(jù)變更的數(shù)據(jù)表,體現(xiàn)了數(shù)據(jù)庫的歷史
(2)開始數(shù)據(jù)遷移
這時(shí),我們看解決方案里,沒有migrations文件夾,因?yàn)檫@時(shí)你沒有開啟變更計(jì)劃
當(dāng)開啟變更后,才會(huì)出現(xiàn)這個(gè)文件夾
Enable-Migrations
然后在項(xiàng)目中就看到了migrations文件夾,它將存儲(chǔ)我們數(shù)據(jù)庫的變更記錄
我們?nèi)绻绿砑恿藬?shù)據(jù)實(shí)體DO,或者修改了原來的實(shí)體,然后希望升級(jí)一個(gè)變更記錄,可以使用add-migration 變更名(隨便寫)
然后在我們項(xiàng)目的Migrations目錄會(huì)多一個(gè)變更文件,它以時(shí)間戳開頭,我們?cè)谧兏鼒?zhí)行時(shí),這個(gè)時(shí)間戳是它順序執(zhí)行的關(guān)鍵
(3)把模型的變更更新到數(shù)據(jù)庫
同時(shí),我們看一個(gè)數(shù)據(jù)表__MigrationHistory,它沒有發(fā)生變化,這是因?yàn)槲覀儧]有把變更更新到數(shù)據(jù)庫,如果希望更新到數(shù)據(jù)庫,可以使用update-database來實(shí)現(xiàn),如果不加版本號(hào),默認(rèn)更新的是最新的變更記錄,它會(huì)包括之前的變更代碼,在更新時(shí)它會(huì)與數(shù)據(jù)表__MigrationHistory里的變更記錄進(jìn)行對(duì)比,如果已經(jīng)更新過了,就不會(huì)執(zhí)行這個(gè)版本,而只會(huì)向后更新!
執(zhí)行完成后,我們?cè)倏匆幌聰?shù)據(jù)表的變化,它也會(huì)多一條最新的變更記錄,以后我們?cè)儆袛?shù)據(jù)表變更,就使用這個(gè)方法即可,EF-migration只要我們好好用,它只會(huì)使我們的開發(fā)便得更快捷!
(4)把模型的變更成SQL腳本,以便在生產(chǎn)環(huán)境中使用
Update-Database -Script -SourceMigration: $InitialDatabase -TargetMigration:init
關(guān)于EF架構(gòu)codeFirst從初始化到數(shù)據(jù)庫遷移的過程是怎樣的就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。