文章目錄
ASP.NET Identity 搭配 Entity Framework 啟用 Code First Migration
ASP.NET Identity 是個方便的 member system, 原生就是搭配 Entity Framework 的 code first 機制,如果需要針對 ASP.NET Identity 做一些擴充,就需要啟用 Code First Migration,過去曾經做過幾次印象不深,近期專案用到趁著這個機會好好紀錄一下
錯誤訊息
訊息內容
The model backing the 'ApplicationDbContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).
錯誤截圖
啟用 Code First Migration
Tools –> NuGet Package Manager –> Package Manager Console
執行指令
Enable-Migrations
Migrations
資料夾增加兩個檔案- 3-1. Configuration.cs
- 設定是否啟用自動整合
- 需要於 DB 建立時,自動加入特定資料,可以寫在 Seed 中
- 3-2. {TimeStamp}_InitialCreate.cs
- DB 已存在才會出現這個檔案
- 用來描述 DB 已存在的物件
- 3-1. Configuration.cs
Migration command
Add-Migration
- Package Manager Console 執行
Add-Migration {MigrationName}
- 比對與上次變更的差異,建立變更描述
Migrations
資料夾會建立{TimeStamp}_{MigrationName}.cs
- 有 Up (描述與之前版本的異動內容)與 Down (描述如何從 Up 執行後回到目前狀態)
- Package Manager Console 執行
Update-Database
- Package Manager Console 執行
Update-Database
- 將未更新的變更皆套用至資料庫
- 加上
-Verbose
可以看到 migration 實際執行的 SQL - 可以在
{TimeStamp}_{MigrationName}.cs
的 Up 中客製行為(e.g. 加入欄位定義或是指定 primary-key ….)
- Package Manager Console 執行
Migrate 到特定版本
可用來降版
Update-Database –TargetMigration:{MigrationName}
- 會執行與目標版本間的所有 Down 指令
可用來回覆至空白資料庫
- Update-Database -TargetMigration:$InitialDatabase
取得可以執行的 SQL
用來取得無法直接透過 Visual Studio 執行變更環境的 SQL
取得所有未套用的變更
Update-Database -Script
取得特定版本
Update-Database -Script -SourceMigration: {MigrationName1} -TargetMigration: {MigrationName2}
取得從空白資料庫到指定版本間的變更
Update-Database -Script -SourceMigration: $InitialDatabase -TargetMigration: {MigrationName}
Auto Migration
執行程式時,如果偵測到資料庫變更,自動套用
using System.Data.Entity;
Database
與MigrateDatabaseToLatestVersion
的 namespaceusing {projectName}.Migrations;
Configuration
的 namespaceusing {projectName}.Models;
{ContextName} 的 namespace
Database.SetInitializer(new MigrateDatabaseToLatestVersion<{ContextName}, Configuration>());
MVC 可以加在 Global.asax 的 Application_Start()
參考資料
文章作者 Yowko Tsai
上次更新 2021-11-03
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。