[asp.net MVC]CodeFirst專案設定Model自動/非自動移轉Enable-Migrations

  • 2045
  • 0
  • 2013-11-12

摘要:[asp.net MVC]CodeFirst專案設定啟動移轉Enable-Migrations

key word: migration移轉, table change

目的:資料庫的某個table增減欄位或是有任何變更時

綱要:不管是自動移轉或非自動移轉,當資料庫的table有變更的時候

其實都還是要下指令update-database,

差別只在於非自動移轉多了一個前置步驟add-migration

 

要設定自動移轉的話,就用-ContextTypeName參數以及-EnableAutomaticMigrations

-ContextTypeName後面就接著你要設定自動移轉的DBContext名稱,

-EnableAutomaticMigrations 後面不用接任何參數,意思是設定為自動移轉

如下:

Enable-Migrations -ContextTypeName  CyclingTrain.Models.CyclingTrainContext  -EnableAutomaticMigrations

 

要設定非自動移轉的話,只要用-ContextTypeName參數,就夠了,如下:

Enable-Migrations -ContextTypeName  CyclingTrain.Models.CyclingTrainContext

 

以後只要Model有做了任何變更,例如:我們在GuestBook.cs裡面新增了一個欄位

public string aaa { get; set; }

那下一步就需要先新增一個移轉,移轉的名稱自己取,然後在Migration資料夾裡面你會看到多了一個移轉的檔案

Add-Migration addAAAColumnGuestBook

然後再下更新資料表的指令,-verbose可下可不下,只是會順便秀出更新table的一些SQL而已

update-database -verbose

這樣非自動移轉就完成

 

如果要在自動移轉的情形下新增某個table某某欄位的話

就直接下

update-database -verbose

就可以了

 

想當初我還一直以為自動移轉就完全不用下指令

直接按下F5執行的時候visual studio就會自己跑移轉

最近終於懂了,還是得下個一行指令

 

補充:

如果移轉是要刪除某某欄位的話,記得加上-force的參數

不然是不會跑的,因為.net是怕我們刪除欄位之後

連帶造成資料遺失,如果是自動移轉,而且要刪除欄位的指令如下:

update-database -force