在 Entity Framework 的 Code First 開發模式中,開發人員通常編寫領域模型類別,然後由 EF 自動生成對應的資料庫結構。然而,傳統流程往往需要先完成 UI 並運行應用程式,才能看到資料庫真正建立的結果。這樣不僅延遲了驗證時機,也增加了調試成本。透過 Visual Studio 內建的 NuGet 套件管理器,我們可以在設計階段即時執行遷移指令,實現「寫完 Code 即生成 DB」的高效工作流。
Enable-Migrations(啟用遷移)、Add-Migration <名稱>(建立遷移腳本)、Update-Database(套用遷移至資料庫)在方案中新增一個名為 CodeFirst 的類別庫專案,作為資料存取層。
開啟「套件管理器主控台」,輸入以下指令:
Install-Package EntityFramework

執行完成後,專案會新增 packages.config、參考 EntityFramework.dll,方案目錄下也會出現 packages 資料夾。注意:將方案加入原始碼控制時,務必包含此資料夾,否則其他環境建置前仍需重新執行安裝指令。

在專案下建立 Models 資料夾,並編寫以下類別與列舉(EF 5 對列舉型別支援良好):
/// <summary> 性別列舉 </summary>
public enum Gender { Female = 0, Male, LadyBoy }
/// <summary> 人名值物件 </summary>
public class PersonName {
public string FirstName { get; set; }
public string LastName { get; set; }
public string FullName => $"{FirstName} {LastName}";
}
public abstract class BaseModel {
protected BaseModel() {
CreatedTime = DateTime.Now;
LastUpdatedTime = DateTime.Now;
}
public DateTime CreatedTime { get; set; }
public string Creater { get; set; }
public DateTime LastUpdatedTime { get; set; }
public string LastUpdater { get; set; }
}
[Table("UserInfo")]
public class UserModel : BaseModel {
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public string LoginName { get; set; }
[MaxLength(50)]
public string Password { get; set; }
public int Age { get; set; }
public Gender Gender { get; set; }
public DateTime? LastLoginTime { get; set; }
public PersonName Name { get; set; }
}
public class CodeFirstDbContext : DbContext {
public DbSet<UserModel> Users { get; set; }
public CodeFirstDbContext() : base("DefaultConnection") { }
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
modelBuilder.Entity<UserModel>();
}
}
在套件管理器主控台執行:
Enable-Migrations
專案會新增 Migrations 資料夾,包含 Configuration.cs 設定檔。
方案新增主控台專案 ConsoleUI,並在其下建立 App_Data 資料夾存放本地資料庫檔(此處使用 LocalDB)。在 CodeFirst 專案的 App.config 加入連接字串:
<connectionStrings>
<add name="DefaultConnection"
connectionString="data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\CodeFirstDb.mdf;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"
providerName="System.Data.SqlClient" />
</connectionStrings>
回到主控台,依序執行:
Add-Migration CreateDb
VS 會生成帶有時間戳的遷移類別,其中 Up() 方法包含建立資料表的 C# 程式碼。EF 5 會自動處理列舉、複雜型別、實體繼承等映射,開發者可視需求微調生成的結構。

在 ConsoleUI 專案加入 CodeFirst 參考,並複製相同連接字串至 App.config。主程式如下:
static void Main() {
var model = new UserModel {
Age = 27,
Creater = "me",
Gender = Gender.LadyBoy,
LastUpdater = "me",
LoginName = "admin",
Name = new PersonName { FirstName = "san", LastName = "zhang" },
Password = "1234"
};
using (var ctx = new CodeFirstDbContext()) {
ctx.Users.Add(model);
ctx.SaveChanges();
}
Console.WriteLine("成功新增使用者,接著查詢...");
using (var ctx = new CodeFirstDbContext()) {
var user = ctx.Users.FirstOrDefault();
Console.WriteLine($"姓名:{user.Name.FullName},性別:{user.Gender},建立時間:{user.CreatedTime}");
}
Console.Read();
}
執行主控台程式,資料庫檔案自動建立於 App_Data,資料寫入與查詢皆正常運作。至此完成 Code First 完整流程。
Install-Package EntityFramework - 安裝 EF 核心套件Enable-Migrations - 啟用 Code First 遷移Add-Migration <名稱> - 產生遷移腳本Update-Database - 將遷移套用至資料庫善用這套工具鏈,讓資料庫結構隨著模型演進,不再需要手寫 SQL 腳本,大幅提升開發效率與可維護性。