国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

EFCodeFirstMigration總結(jié)

2019-11-14 14:17:55
字體:
供稿:網(wǎng)友

開啟Migration

1. 通過 Tools->Nuget Package Manager->Package Manager Console 打開Package Manager Console窗口

2. Default PRoject選擇當(dāng)前的DbContext所在的項目

3. 通過命令開啟Migration

Enable-Migrations

開啟之后,DbContext對應(yīng)的項目中會生成一個Migrations的文件夾, 主要用來存放各個版本自動生成的更新描述文件

類似于下圖:

image

初始化庫

通常你新建了模型,在數(shù)據(jù)庫建庫之后需要執(zhí)行一次add-migration命令生成一個庫初始化的migration記錄

add-migration 20160201003

后面部分的名字我通常都會按照當(dāng)天日期拼接當(dāng)天的版本號組成,另外一種不錯的實踐是按照增加的業(yè)務(wù)名稱命名,英文名稱會相對好點.

更新庫

庫的更新可以分為手動更新跟自動更新, 通常Code First Migration的文章都會講這里要通過Update-Database命令來把剛才的變更更新到庫里面, 通常DEV環(huán)境可以這么做,因為是直連的, 但是我們的Staging與Production環(huán)境是不可以直連的,我們要怎么做呢?

前面有提到可以自動更新,其意思就是說,你通過 add-migration生成了migration腳本,那當(dāng)程序啟動的時候,如果發(fā)現(xiàn)數(shù)庫接口不一致,那這個就需要更新,這個時候如果是自動更新的狀態(tài),那程序會自動執(zhí)行(從意思上等同于update-database, 產(chǎn)生的效果相同,但是并未實際考證是否也是跑的update-database命令), 因此無論是dev環(huán)境還是staging, production都可以通過自動update-database來完成數(shù)據(jù)庫的更新。

如何設(shè)置自動更新

這里有兩步:

1. 在migrations文件夾下有個configuration的文件, 代碼如下:

public Configuration()        {            AutomaticMigrationsEnabled = true;            AutomaticMigrationDataLossAllowed = false;        }

AutomaticMigrationsEnable = true 之后, 設(shè)置EF為自動做數(shù)據(jù)庫更新。

2. 在Global.cs或者任何程序啟動的地方加入:

Database.SetInitializer(new MigrateDatabaseToLatestVersion<CustomerDbContext, Configuration>());

這句是設(shè)定當(dāng)前DbContext的一個初始化配置.

潛在的問題

自動遷移,在某些該名稱,或者刪除字段的時候,會造成現(xiàn)有數(shù)據(jù)的丟失,這個需要注意,目前我也是在探索過程中,有進一步的研究成果,會在更新博文說明。

 

【補充部分】

初始化腳本的更新

public partial class InitDefaultData : DbMigration    {        public override void Up()        {            Sql(@"--初始化FileType原始數(shù)據(jù)insert into FileType (SysId,FileTypeId,FileTypeName,Status,CreationTime) select NEWID(),10001,'客戶資料',0,GETDATE();insert into FileType (SysId,FileTypeId,FileTypeName,Status,CreationTime) select NEWID(),10002,'訂單資料',0,GETDATE();insert into FileType (SysId,FileTypeId,FileTypeName,Status,CreationTime) select NEWID(),10003,'車輛資料',0,GETDATE();--初始化FileCategory原始數(shù)據(jù)insert into FileCategory (SysId,FileCategoryId,FileCategoryName,Status,CreationTime) select NEWID(),1,'圖片',0,GETDATE();insert into FileCategory (SysId,FileCategoryId,FileCategoryName,Status,CreationTime) select NEWID(),2,'復(fù)印件',0,GETDATE();insert into FileCategory (SysId,FileCategoryId,FileCategoryName,Status,CreationTime) select NEWID(),3,'視頻',0,GETDATE();insert into FileCategory (SysId,FileCategoryId,FileCategoryName,Status,CreationTime) select NEWID(),4,'Excel文件',0,GETDATE();insert into FileCategory (SysId,FileCategoryId,FileCategoryName,Status,CreationTime) select NEWID(),5,'Word文件',0,GETDATE();");        }        public override void Down()        {            Sql(@"truncate table FileType");            Sql(@"truncate table FileCategory");        }    }

可以通過Sql函數(shù)來執(zhí)行一些自定義的SQL腳本。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 黄大仙区| 贡山| 历史| 东乡县| 林西县| 双鸭山市| 嵩明县| 金溪县| 会同县| 嫩江县| 武穴市| 广东省| 五河县| 武陟县| 韶关市| 淮安市| 高要市| 平山县| 简阳市| 新安县| 贡觉县| 三明市| 嘉义市| 洪洞县| 武胜县| 启东市| 凤凰县| 松溪县| 长垣县| 光山县| 和硕县| 布尔津县| 慈利县| 鄂托克旗| 日土县| 郸城县| 舟曲县| 鹤壁市| 广州市| 武威市| 白玉县|