Entity Framework Core(簡稱 EF Core)是 Microsoft 提供的 .NET 資料存取框架。它可以讓我們透過 C# 物件操作關聯式資料庫,而不是所有操作都自己寫 SQL。EF Core 會協助產生 SQL,並將查詢結果轉換成 TaskItem 物件。這類將資料庫資料與程式物件對應的技術稱為 ORM(Object-Relational Mapping,物件關聯對應)。
使用昨日程式碼
安裝套件
安裝 EF Core 10 版本。在終端機輸入:
dotnet add package Microsoft.EntityFrameworkCore.Sqlite --version "10.0.*"
安裝完成後輸入:
dotnet list package
新增 Data 資料夾
在 VS Code 左側檔案總管:
using Microsoft.EntityFrameworkCore;
using TaskFlow3.Api.Models;
namespace TaskFlow3.Api.Data
{
public class TaskFlowDbContext : DbContext
{
public TaskFlowDbContext(
DbContextOptions<TaskFlowDbContext> options
) : base(options)
{
}
public DbSet<TaskItem> Tasks { get; set; }
protected override void OnModelCreating(
ModelBuilder modelBuilder)
{
modelBuilder.Entity<TaskItem>(entity =>
{
entity.ToTable("Tasks");
entity.HasKey(t => t.Id);
entity.Property(t => t.Id)
.ValueGeneratedOnAdd();
entity.Property(t => t.Title)
.IsRequired();
entity.Property(t => t.IsCompleted)
.IsRequired();
});
}
}
}
using Microsoft.EntityFrameworkCore;
using TaskFlow3.Api.Data;
using TaskFlow3.Api.Services;
**var** builder = WebApplication.CreateBuilder(args);
*// OpenAPI*
builder.Services.AddOpenApi();
*// Controller*
builder.Services.AddControllers();
builder.Services.AddSingleton\<ITaskService, TaskService>();
string dbPath = Path.Combine(
builder.Environment.ContentRootPath,
"taskflow\.db"
);
builder.Services.AddDbContext\<TaskFlowDbContext>(options =>
options.UseSqlite($"Data Source={dbPath}")
);
**var** app = builder.Build();
*// 開發環境才啟用 OpenAPI 和 Swagger UI*
if (app.Environment.IsDevelopment())
{
app.MapOpenApi();
app.UseSwaggerUI(options =>
{
options.SwaggerEndpoint("/openapi/v1.json", "v1");
});
}
app.UseHttpsRedirection();
*// 啟用 Controller 路由*
app.MapControllers();
*// 測試路由*
app.MapGet("/test", () => "伺服器正常運作!");
app.MapGet("/db-check", **async** (TaskFlowDbContext db) =>
{
**var** tasks = await db.Tasks.ToListAsync();
return Results.Ok(tasks);
});
app.Run();
結果
在終端機輸入dotnet build,再輸入dotnet run