[C#.NET][Entity Framework] 再探 Code First Migration

[C#.NET][Entity Framework] 再探 Code First Migration

續上篇,http://www.dotblogs.com.tw/yc421206/archive/2014/02/20/144093.aspx,我習慣將 Model 的開成另外一個 class 專案,好讓其他專案能夠引用,不過我在操作的時候碰到了不少問題,順手寫下記錄,希望自己以後還用得到。

 

如果你跟我一樣

  • 把 DbContext 寫在另一個 class 專案,供 APP 主程式使用
  • 一開始沒有啟用 Enable-Migrations
  • 想保留 SQL 資料

可以跟著我這樣做

 


這一個 class 專案。需要有連線字串

image

 

完成動作後,新增一筆資料,此時資料庫也新增一筆

image

 

若這時候我在 Customer 增加類別 OrderName,VS 就會很無情的報錯

The model backing the 'CustomerDbContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).

image

 

此時調用 Enable-Migrations,跟上篇比較 http://www.dotblogs.com.tw/yc421206/archive/2014/02/20/144093.aspx,居然沒有自動幫我產生 InitialCreate.cs,也沒有 ContextKey

沒關係我們可以自己補上,規則是"組件名稱+DbContext",AutomaticMigrationsEnabled 也設成 true

AutomaticMigrationsEnabled = true;
ContextKey = "Model.CustomerDbContext";
image

 

PS.這也是我卡關的地方

 

 

調用 Add-Migration InitialCreate,VS 自動產生相關的東西

image

 

 

調用 Update-Database

image

 

 

將 Configuration class 公開

image

 


 
在AP一載入的時候調用以下
Database.SetInitializer(new MigrateDatabaseToLatestVersion<CustomerDbContext, Model.Migrations.Configuration>());
image

 

 
再次執行F5,順利執行APP,SQL 也順利的增加欄位
image

 

心得:

花了將近半天在處理這個問題,感謝 Bibby 大力的協助,其實只要一開始將 Enable-Migrations 啟用就不會卡關卡那麼久

 


文章參考:http://www.dotblogs.com.tw/yc421206/archive/2014/02/21/144111.aspx

相關資料:http://msdn.microsoft.com/zh-tw/data/jj591621.aspx


補充:

Database.SetInitializer 應該寫在 DbContext 建構式裡會比較恰當

若有謬誤,煩請告知,新手發帖請多包涵


Microsoft MVP Award 2010~2017 C# 第四季
Microsoft MVP Award 2018~2022 .NET

Image result for microsoft+mvp+logo