麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

EFCodeFirstMigration總結

2019-11-14 14:28:06
字體:
來源:轉載
供稿:網友

開啟Migration

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

2. Default PRoject選擇當前的DbContext所在的項目

3. 通過命令開啟Migration

Enable-Migrations

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

類似于下圖:

image

初始化庫

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

add-migration 20160201003

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

更新庫

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

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

如何設置自動更新

這里有兩步:

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

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

AutomaticMigrationsEnable = true 之后, 設置EF為自動做數據庫更新。

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

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

這句是設定當前DbContext的一個初始化配置.

潛在的問題

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

 

【補充部分】

初始化腳本的更新

public partial class InitDefaultData : DbMigration    {        public override void Up()        {            Sql(@"--初始化FileType原始數據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原始數據insert into FileCategory (SysId,FileCategoryId,FileCategoryName,Status,CreationTime) select NEWID(),1,'圖片',0,GETDATE();insert into FileCategory (SysId,FileCategoryId,FileCategoryName,Status,CreationTime) select NEWID(),2,'復印件',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函數來執行一些自定義的SQL腳本。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 91 久久 | 久久精品成人免费国产片桃视频 | 久久网站热最新地址4 | 久久999久久| 天天色综合2 | 杏美月av | 一级尻逼视频 | 国产精品久久久久久久亚洲按摩 | 欧美毛片| 久草在线资源福利站 | 亚洲免费视频一区 | 成年人小视频在线观看 | 亚洲一区二区在线视频 | 欧美一级片在线 | 亚洲网站在线观看视频 | 国产精品一区二区在线 | jizzjizzjizz少妇| 青青草成人免费视频在线 | 国产精品亚洲精品久久 | 黄色7777 | 一级毛片真人免费播放视频 | 一级黄色片在线看 | 欧美精品一区二区性色 | 国产精品久久久久网站 | 午夜精品久久久久久久久久久久久蜜桃 | 国产乱一区二区三区视频 | 一道本不卡一区 | 免费观看在线 | 青草av.久久免费一区 | 亚洲一区二区三区视频 | 久久精品中文字幕 | 中国美女一级黄色大片 | 精品国产三级a | 亚洲va久久久噜噜噜久久男同 | 在线成人www免费观看视频 | 香蕉视频99 | 欧美jizzhd极品欧美 | 国产一级毛片高清视频 | 在线成人毛片 | 中文字幕在线观看成人 | 三级国产三级在线 |