首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

善用 NuGet 套件管理器,輕鬆實現 Entity Framework Code First 開發流程

     編輯:關於.NET

前言

在 Entity Framework 的 Code First 開發模式中,開發人員通常編寫領域模型類別,然後由 EF 自動生成對應的資料庫結構。然而,傳統流程往往需要先完成 UI 並運行應用程式,才能看到資料庫真正建立的結果。這樣不僅延遲了驗證時機,也增加了調試成本。透過 Visual Studio 內建的 NuGet 套件管理器,我們可以在設計階段即時執行遷移指令,實現「寫完 Code 即生成 DB」的高效工作流。

環境準備

  • 開發工具:Visual Studio 2012
  • 目標框架:.NET Framework 4.5 (Entity Framework 5)
  • 已安裝最新版「NuGet 套件管理器」擴充功能
  • 常用 EF 遷移指令:Enable-Migrations(啟用遷移)、Add-Migration <名稱>(建立遷移腳本)、Update-Database(套用遷移至資料庫)

實作步驟

1. 建立類別庫專案

在方案中新增一個名為 CodeFirst 的類別庫專案,作為資料存取層。

2. 安裝 Entity Framework 套件

開啟「套件管理器主控台」,輸入以下指令:

Install-Package EntityFramework

套件管理器主控台

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

安裝後專案結構

3. 定義領域模型

在專案下建立 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; }
}

4. 建立 DbContext

public class CodeFirstDbContext : DbContext {
    public DbSet<UserModel> Users { get; set; }
    public CodeFirstDbContext() : base("DefaultConnection") { }
    protected override void OnModelCreating(DbModelBuilder modelBuilder) {
        modelBuilder.Entity<UserModel>();
    }
}

5. 啟用遷移

在套件管理器主控台執行:

Enable-Migrations

專案會新增 Migrations 資料夾,包含 Configuration.cs 設定檔。

6. 建立測試專案與連接字串

方案新增主控台專案 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>

7. 建立初始遷移腳本

回到主控台,依序執行:

Add-Migration CreateDb

VS 會生成帶有時間戳的遷移類別,其中 Up() 方法包含建立資料表的 C# 程式碼。EF 5 會自動處理列舉、複雜型別、實體繼承等映射,開發者可視需求微調生成的結構。

遷移腳本範例

8. 撰寫測試程式驗證

在 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();
}

9. 執行結果

執行主控台程式,資料庫檔案自動建立於 App_Data,資料寫入與查詢皆正常運作。至此完成 Code First 完整流程。

常用 NuGet 指令速查

  • Install-Package EntityFramework - 安裝 EF 核心套件
  • Enable-Migrations - 啟用 Code First 遷移
  • Add-Migration <名稱> - 產生遷移腳本
  • Update-Database - 將遷移套用至資料庫

善用這套工具鏈,讓資料庫結構隨著模型演進,不再需要手寫 SQL 腳本,大幅提升開發效率與可維護性。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved