iT邦幫忙

2025 iThome 鐵人賽

DAY 12
0

哈囉大家好!
今天要來實際練習操作對資料表進行CRUD!
這次要用到的工具是Entity Framework Core(EF Core),是微軟新一代的物件關聯對應(ORM)框架。

下面簡單介紹一下EF Core的概念和功能:

EF Core的概念和功能

  1. 物件關聯對應(ORM = Object Relational Mapping)
    ORM是取Object, Relational, Mapping這三個字的字首,藍簡單看看這三個單字代表的意思:

    • 物件(Object): 在C#中定義的Entity Class,像之前舉例的Post Class, 有id, title, content...等property。
    • 關聯(Relational): 指的是關聯式資料庫中的資料表。
    • 對應(Mapping): 將C# Class對應到資料庫中的table,並將property對應到資料表的欄位。
      透過EF Core, 可以直接利用C#物件和method來進行對資料庫的增刪查改。
  2. LINQ(Language Integrated Query)支援
    讓開發者可以使用LINQ查詢語法(一種內建於C#的查詢語言)來從資料庫裡檢索資料。

  3. Database Provider
    EF Core透過Database Provider的機制來支援多種資料庫引擎,像是PostgreSQL, MySQL...等。當需要邱煥資料庫時,通常只需要更換對應的provider套件和connection string,不需要修改邏輯部分的程式碼。

  4. Model
    之前在調整資料表架構有介紹過的Model!
    EF Core使用Model來執行資料存取,實體Class(Entity Class)代表的是資料庫中的資料表,資料庫上下文物件(DbContext)代表資料庫的一個工作階段(Session),會透過DbContext作為主要介面和資料庫互動!

  5. Migration
    之前也有介紹更新資料庫結構的工具-Migration!讓開發者可以透過程式碼來管理資料庫的結構變更,Migration檔案包含了把資料庫結構從舊版更新到新版所需要的SQL Query,讓資料庫的版本控制更加容易~

對EF Core有一些認識後,現在來試試看看一些常用的語法:
(這裡假設已經在某個service class中透過依賴注入(DI)得到PostDbContext實例,命名為_context

  1. 查詢
await _context.Posts.ToListAsync(); // 取得資料表Posts的所有資料
var post = await _context.Posts.SingleOrDefaultAsync(p => p.PostId == 100); // 根據條件過濾出單一紀錄
var orderPosts = await _context.Posts.OrderByDescending(p => p.Liked).ToListAsync(); // 將貼文以貼文讚數由多到少排序
  1. 新增
_context.Posts.Add(newPost); // 新增一則貼文
await _context.SaveChangesAsync(); // SaveChangesAsync() 執行 SQL INSERT,將資料寫入資料庫
  1. 更新
    更新資料時比較特別!需要先將實體從資料庫中讀取出來,修改後再儲存!
var existingPost = await _context.Posts.FindAsync(postId); 
if (existingPost != null) 
{ 
    existingPost.Title = "new title!"; 
} 
await _context.SaveChangesAsync();
  1. 刪除
    此處Remove()是把物件標記為「刪除」,SaveChangesAsync()執行時才會執行SQL DELETE!
var postToDelete = await _context.Posts.FindAsync(postId); 
if (postToDelete != null) 
{ 
    _context.Posts.Remove(postToDelete); 
} 
await _context.SaveChangesAsync();

今天簡單認識了EF Core, 並且了解一些比較常用的LINQ語法/images/emoticon/emoticon08.gif


上一篇
DAY 11 - 認識套件管理工具 - NuGet!
系列文
30天的旅程!從學習C#到開發小專案12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言