[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 專案。需要有連線字串
完成動作後,新增一筆資料,此時資料庫也新增一筆
若這時候我在 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).
此時調用 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";
PS.這也是我卡關的地方
調用 Add-Migration InitialCreate,VS 自動產生相關的東西
調用 Update-Database
將 Configuration class 公開
在AP一載入的時候調用以下
Database.SetInitializer(new MigrateDatabaseToLatestVersion<CustomerDbContext, Model.Migrations.Configuration>());
再次執行F5,順利執行APP,SQL 也順利的增加欄位
心得:
花了將近半天在處理這個問題,感謝 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