iT邦幫忙

2026 iThome 鐵人賽

DAY 25
0
自我挑戰組

學習C#續系列 第 25 篇

Day 25: 控制台輕量資料庫:SQLite 與 EF Core

  • 分享至 

  • xImage
  •  

SQLite 與 EF Core 簡介:

  • SQLite:一種無伺服器(Serverless)、零設定的輕量嵌入式資料庫,所有資料直接存成單一本機檔案(如 app.db)。
  • Entity Framework Core (EF Core):.NET 的物件關聯對應(ORM)框架。讓開發者用操作 C# 物件與 LINQ 的方式來存取資料庫,不需要手動撰寫原生 SQL 語法。

必要套件安裝(NuGet):

  • Microsoft.EntityFrameworkCore.Sqlite:包含 EF Core 核心引擎與 SQLite 資料庫驅動。
  • 補充說明:若專案是傳統的 .NET Framework,除了安裝 Microsoft.EntityFrameworkCore.Sqlite (3.1.x) 外,還需確保 e_sqlite3.dll 原生檔已輸出至執行目錄,並在程式開頭執行 SQLitePCL.Batteries_V2.Init() 進行初始化,防止出現找不到原生模組的例外。

設定 DbContext(資料庫上下文):

  • 繼承自 Microsoft.EntityFrameworkCore.DbContext。
  • 代表與資料庫的會話(Session),內部宣告 DbSet 屬性,用以對應資料庫中的實體資料表。
  • 覆寫 OnConfiguring 方法,使用 optionsBuilder.UseSqlite("Data Source=檔名.db") 指定資料庫檔案路徑。

Code-First 與資料庫初始化:

  • 先撰寫 C# Entity 類別,再由框架自動衍生出對應的資料表結構。
  • 在 Console 輕量開發中,可呼叫 context.Database.EnsureCreated():若資料庫檔案不存在則自動依實體結構建立,省去設定複雜 Migration 的步驟。

基礎 CRUD 操作範式:

  • Create(新增):context.Todos.Add(item); -> context.SaveChanges();。
  • Read(查詢):使用 LINQ 查詢語法,如 context.Todos.Where(...).ToList();。
  • Update(修改):先查出實體物件,直接修改屬性值 -> context.SaveChanges();(EF Core 的變更追蹤機制會自動生成 UPDATE 語句)。
  • Delete(刪除):context.Todos.Remove(item); -> context.SaveChanges();
  • 補充說明:SQLite 原生不支援對 decimal 欄位直接做資料庫端的 OrderBy 排序,數值建議宣告為 double,或先呼叫 .ToList() 轉為記憶體物件後再進行 LINQ 排序。

實作範例
https://ithelp.ithome.com.tw/upload/images/20261008/20178925KRTBbnxyWY.png

https://ithelp.ithome.com.tw/upload/images/20261008/20178925MCTs1YV6jv.png

https://ithelp.ithome.com.tw/upload/images/20261008/20178925s2KsllW3Qq.png

https://ithelp.ithome.com.tw/upload/images/20261008/201789259um3vKdzLL.png


上一篇
Day 24: 控制台 JSON 資料持久化
系列文
學習C#續 共 25 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言