2013年12月9日 星期一

Entity Framework Code First Migrations

測試環境:VS2013、Windwos 7

Entity Framework Code First Migrations 資料庫移轉)功能是用來當 model class 有任何修改時可以將這些變動可以自動套用到資料庫中。


本文內容:

啟用資料庫移轉
建立測試用資料
建立初啟移轉基準
更新資料庫
修改Model Class
修改Controller
修改View
修改Seed
建立移轉基準
實際更新至資料庫



啟用資料庫移轉

工具(TOOLS)=>程式庫套件管理員(Library Package Manager)=>套件管理器主控台(Package Manager Console)
PM> Enable-Migrations -ContextTypeName MvcMovie.Models.MovieDBContext



將新建一 Migrations 資料夾,並產生Configuration.cs 檔案

註1: Enable-Migrations的參數除了-ContextTypeName (可指定使用的DB Context)外,還有
-EnableAutomaticMigrations,這個參數是用來宣告 Migration 是採自動或半自動的方式來進行。有加上 -EnableAutomaticMigrations參數時表示採自動升級。

註2: 自動或半自動的升級方式不同處在於: 自動升級方式不要再搭配 add-migration 指令而只要再加上 update-database 指令即完成升級和更新資料庫的系統動作。





建立測試用資料
將Configuration.cs中的Seed Function 用以下程式碼取代,這些程式是用來建立四筆測試資料。
protected override void Seed(MvcMovie.Models.MovieDBContext context)
{
   context.
Movies.AddOrUpdate( i => i.Title,
       
new Movie
       {
           
Title = "When Harry Met Sally",
           
ReleaseDate = DateTime.Parse("1989-1-11"),
           
Genre = "Romantic Comedy",
           
Price = 7.99M
       },

        
new Movie
        {
            
Title = "Ghostbusters ",
            
ReleaseDate = DateTime.Parse("1984-3-13"),
            
Genre = "Comedy",
            
Price = 8.99M
        },

        
new Movie
        {
            
Title = "Ghostbusters 2",
            
ReleaseDate = DateTime.Parse("1986-2-23"),
            
Genre = "Comedy",
            
Price = 9.99M
        },

      
new Movie
      {
          
Title = "Rio Bravo",
          
ReleaseDate = DateTime.Parse("1959-4-15"),
          
Genre = "Western",
          
Price = 3.99M
      }
  );
}
記得引用 MvcMovie.Models;
在每次的Migration 發生時(update-database),Code First Migratins (update-database)都會去呼叫 Seed這個方法 (Configuration.cs)。

建立初啟移轉基準
在套件管理器主控台中輸入 add-migration Initial 來建立一個移轉啟始點。



建立成功時系統會在 Migrations 資料夾中自動產生 timestamp_Initial.cs 檔案(如下圖)。



在這個檔案中包含有建立資料庫結構的程式碼。

更新資料庫
在套件管理器主控台中輸入 update-database 來實際產生本次的移轉作業。執行成功後會自動更新資料庫(Local DB File)



修改Model Class
如新增一個欄位等作業。

修改Controller
Controller 中的Create、Edit Action Bind 也要記得加入新欄位。

修改View
Index/Create/Edit/Details/Delete 等View 也要加入新欄位。

修改Seed()
前面由程式自動新建的測試資料中也要加入新欄位和資料。

建立移轉基準
在套件管理器主控台中輸入 add-migration Rating 來建立一個新移轉點。

實際更新至資料庫

在套件管理器主控台中輸入 update-database 來實際產生本次的移轉作業。

沒有留言:

張貼留言