內容目錄
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有明顯差異。
在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