1. programming 1.1 C# 1.2 ASP.NET Core 1.4 EntityFramework Core

方便的EF Core

2024 年 2 月 8 日

1. 前言

最一開始學習webform時,第一次接觸到使用ado.net,覺得操作起來很麻煩,沒辦法像物件一樣簡單檢索資料。

後來參加了一場公司的內部訓練,對資料結構的應用有了一些認識,開始將資料庫讀出的資料都以List<Dictionary<key,object>>的方式來存取,至少這樣我可以知道每個資料是什麼欄位,而不用再另外記憶第幾個索引對應到第幾欄。

再後來,從書上看到了Entityframework,直接將資料庫的資料變成物件,真是太方便了,只要在一開始設定好類別,便能將資料資料庫的資料對應成C#的物件集合,對開發及除錯的幫助很大。

在我的想像中,認為這樣已經很方便了,沒想到在網路上又看到「將資料庫轉成C#類別」、「透過C#類別自動建立資料庫」等兩種開發模式,令我不斷讚嘆開發人員的智慧。而「Code First」,就是我這篇文章想要整理的主題,既可以從既有資料庫轉成C#類別,亦可從類別建立資料庫。

2. 事前準備

我們需要安裝以下幾個套件才能使用 EF Core:

  • 安裝 EntityframeworkCore
  • 安裝 EntityframeworkCore.Tools
  • 安裝 EntityframeworkCore.SqlServer
  • 安裝 EntityframeworkCore.Design

安裝方式可從2.1、2.2.1、2.2.2任選一種來進行安裝。

2.1 透過Nuget安裝

2.2 透過指令安裝

2.2.1 Package Manager Console
Install-package Microsoft.EntityFrameworkCore -v 6.0.27
Install-package Microsoft.EntityFrameworkCore.Tools -v 6.0.27
Install-package Microsoft.EntityFrameworkCore.SqlServer -v 6.0.27
Install-package Microsoft.EntityFrameworkCore.Design -v 6.0.27
2.2.2 .NET CLI
dotnet add package Microsoft.EntityFrameworkCore -v 6.0.27
dotnet add package Microsoft.EntityFrameworkCore.Tools -v 6.0.27
dotnet add package Microsoft.EntityFrameworkCore.SqlServer -v 6.0.27
dotnet add package Microsoft.EntityFrameworkCore.Design -v 6.0.27
dotnet list package

3. 建立模型類別

namespace MauiApp4_Reminder.Models
{
    public class ToDoTitle
    {
        public int TitleId { get; set; }  //Primary Key
        public string Title { get; set; }
        public DateTime UpdateTime { get; set; }
    }
}
namespace MauiApp4_Reminder.Models
{
    public class ToDoRecord
    {
        public int RecordId { get; set; }  //Primary Key
        public string Record { get; set; }
        public DateTime UpdateTime { get; set; }
    }
}

4. 建立DbContext

從這裡開始,ASP.NET CORE MVC 與 .NET MAUI BLAZOR有明顯差異。

https://offdutysorcerer.synology.me/2024/02/05/%e5%9c%a8-net-maui-blazor%e4%bd%bf%e7%94%a8ef-core/

在Models/XXXContext.cs檔案內建立以下內容

using Microsoft.EntityFrameworkCore;
public class xxxContext : DbContext
{
    public xxxContext(DbContextOptions<xxxContext> options) : base(options){}
    //public virtual DbSet<TableA> Users {get; set; }
    //public virtual DbSet<TableB> Users {get; set; }
    //public virtual DbSet<TableC> Users {get; set; }
}

5. 設定appsettings.json

{
...
    "ConnectionStrings": {
    "xxxContext":
        "Data Source=sqlite.db"
    }
}

6. 在Program.cs中註冊xxxContext

string connString = builder.Configuration.GetConnectionString("xxxContext");

builder.Services.AddDbContext<xxxContext>(options =>
options.UseSqlite(builder.Configuration.GetConnectionString("xxxContext")));

註:在非asp.net core mvc專案中可能沒有appsettings.json,需使用其他方式設定連線資訊。

7. 使用Migration建立資料庫

可以任選下列兩種方式進行Migration:

Package Manager Console

add-migration InitialDB
update-datebase

.NET CLI

dotnet ef migrations add InitialDB
dotnet ef database update

8. 加入初始資料(可選)

8.1 加入初始資料

8.2. 將種子資料同步至資料庫

9. 使用EF Core

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *