iT邦幫忙

2025 iThome 鐵人賽

DAY 18
0
自我挑戰組

打造自己的Medium系列 第 18

Day18 Entity Framework Core

  • 分享至 

  • xImage
  •  

雖然這次不會用到,但想要稍微講一下ASP.NET Core的ORM,Entity Framework Core

什麼是ORM?

故事1

有一名警衛,他看守著三道門,那這幾個門各自對應一把鑰匙,總共三把鑰匙,但他每次巡邏的時候,都覺得掏對鑰匙很麻煩,所以他就許願,有一個開門機器,說要開哪個門就開哪個門,機器會自己對照到那個門對應的鑰,他指定哪個門就好

故事2

小明今天很開心的開發完後端,寫了許多SQL處理資料庫的行為,需求完成了,可是PM突然說,他不想要用MSSQL,想要換到PostgreSQL,可憐的小明晚上留下來加班,要把語法都改過來,這時候他就想,如果可以開外掛,自動處理語法切換就好了

物件關聯對應(Object-Relational Mapping),用來將資料庫中的資料表(Relational)與程式中的物件(Object)做對應,開發者可以用物件導向的方式(如類別與屬性)來操作資料庫,而不需要寫 SQL 語句。
當然,既然是通用,可以預期功能相對比較籠統,如果要針對特定資料庫更精細的做法,也可能會有需要手動寫的時候,但已經大大的減少,切換資料庫帶來的大量修改

Entity Framework Core

  1. 安裝指令
    可以注意到這裡是sqlServer,後面可以替換自己想要的,例如:PostgreSQL
    dotnet add package Microsoft.EntityFrameworkCore.SqlServer
  2. 定義DbContext
    說明有哪些資料表要使用
public class CatalogContext : DbContext
{
  public CatalogContext(DbContextOptions<CatalogContext> options) : base(options)
  {

  }

  public DbSet<CatalogItem> CatalogItems { get; set; }
  public DbSet<CatalogBrand> CatalogBrands { get; set; }
  public DbSet<CatalogType> CatalogTypes { get; set; }
}
  1. 設定EF
    說明要用哪個資料庫
builder.Services.AddDbContext<CatalogContext>(
    options => options.UseSqlServer(
        builder.Configuration.GetConnectionString("DefaultConnection")));
  1. 使用方式
    假設原本SQL
SELECT 
    Id AS Value,
    Name AS Text
FROM 
    CatalogBrands
WHERE 
    Enabled = 1
ORDER BY 
    Name ASC;

使用ORM的話

var brandItems = await _context.CatalogBrands
    .Where(b => b.Enabled)               // 篩選Enabled = true
    .OrderBy(b => b.Name)                // 依 Name 由小到大排序
    .Select(b => new SelectListItem {    // 只取 Id、Name
        Value = b.Id, 
        Text = b.Name 
    })
    .ToListAsync();                      // 非同步取得結果清單

參考資料

Working with Data in ASP.NET Core Apps

作者的哈啦

我覺得快速初步了解某樣知識是好的,但什麼都想速成,不去實際踩雷犯錯是不可能的,在追捧輕鬆獲益的時代,好像埋頭苦幹的人都是傻子,相比之下,我果然還是更喜歡匠人精神,像史特拉帝瓦理琴那樣


上一篇
Day17 Swagger
下一篇
Day19 JWT
系列文
打造自己的Medium30
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言