哈囉大家好!
今天要來實際練習操作對資料表進行CRUD!
這次要用到的工具是Entity Framework Core(EF Core),是微軟新一代的物件關聯對應(ORM)框架。
下面簡單介紹一下EF Core的概念和功能:
物件關聯對應(ORM = Object Relational Mapping)
ORM是取Object, Relational, Mapping這三個字的字首,藍簡單看看這三個單字代表的意思:
LINQ(Language Integrated Query)支援
讓開發者可以使用LINQ查詢語法(一種內建於C#的查詢語言)來從資料庫裡檢索資料。
Database Provider
EF Core透過Database Provider的機制來支援多種資料庫引擎,像是PostgreSQL, MySQL...等。當需要邱煥資料庫時,通常只需要更換對應的provider套件和connection string,不需要修改邏輯部分的程式碼。
Model
之前在調整資料表架構有介紹過的Model!
EF Core使用Model來執行資料存取,實體Class(Entity Class)代表的是資料庫中的資料表,資料庫上下文物件(DbContext)代表資料庫的一個工作階段(Session),會透過DbContext作為主要介面和資料庫互動!
Migration
之前也有介紹更新資料庫結構的工具-Migration!讓開發者可以透過程式碼來管理資料庫的結構變更,Migration檔案包含了把資料庫結構從舊版更新到新版所需要的SQL Query,讓資料庫的版本控制更加容易~
對EF Core有一些認識後,現在來試試看看一些常用的語法:
(這裡假設已經在某個service class中透過依賴注入(DI)得到PostDbContext實例,命名為_context
。
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(); // 將貼文以貼文讚數由多到少排序
_context.Posts.Add(newPost); // 新增一則貼文
await _context.SaveChangesAsync(); // SaveChangesAsync() 執行 SQL INSERT,將資料寫入資料庫
var existingPost = await _context.Posts.FindAsync(postId);
if (existingPost != null)
{
existingPost.Title = "new title!";
}
await _context.SaveChangesAsync();
var postToDelete = await _context.Posts.FindAsync(postId);
if (postToDelete != null)
{
_context.Posts.Remove(postToDelete);
}
await _context.SaveChangesAsync();
今天簡單認識了EF Core, 並且了解一些比較常用的LINQ語法