[C#] 探索 FreeSql:讓資料庫操作更為簡便高效 - 簡單 新增/編輯,查詢資料

2024-02-21

最近研究了一個我之前看到很有興趣的東西,最近再重新評估工具的時候測試一下

就想說順便把這套件介紹給大家這就是 FreeSql



他是來自於中國的前輩們,社群很活絡,而且文件很多都是中文,只是最近再測試工具,所以就想說測試一下

這篇文章,不會寫太多,單純就寫 Upsert  還有查詢,其他我就不測試了,對我來說通常 Upsert 跟 查詢比較常用到

因為他支持很多資料庫,甚至很多是我沒聽過的,今天主要我測試是使用 SQLite


1. 因為我測試是使用 SQLite ,所以必須先安裝 FreeSql.Provider.SqliteFreeSql.Repository 

2. 這邊我設計一個簡單的物件,我也沒有先用 SQLite  的工具先開表的規格,單純的開物件 OrderInfo,並且測試 新增/修改 一筆 跟一次新增/修改 多筆 

var dbPath = AppDomain.CurrentDomain.BaseDirectory + "sampleSQLite.db"; var freeSQLiteDB = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.Sqlite, "data source=" + dbPath) .UseAutoSyncStructure(true) .Build(); var orderId = Guid.Parse(input: "d1111111-2222-3333-4444-955227c9912d"); //這是需要引入 FreeSql.Repository 才會有 var repoOrderInfo = freeSQLiteDB.GetRepository<OrderInfo>(); //新增一筆 var o1 = new OrderInfo { OrderId = orderId, Index = 99, Title = "order99-ttile", CreateDate = DateTime.Now, Memo = "測試99-單筆測試" }; repoOrderInfo.InsertOrUpdate(o1); //一次新增多筆 List<OrderInfo> inputData = new List<OrderInfo>(); for (var i = 1; i <= 10; i++) { var tmpOrder = new OrderInfo { OrderId = Guid.NewGuid(), Index = i * 10, Title = "order" + i + "-ttile", CreateDate = DateTime.Now, Memo = "測試" + i }; inputData.Add(tmpOrder); } var effectRows = freeSQLiteDB.InsertOrUpdate<OrderInfo>().SetSource(inputData).ExecuteAffrows(); Console.WriteLine("影響:" + effectRows); //直接變成 TableName [FreeSql.DataAnnotations.Table(Name = "ORDERINFOS")] public class OrderInfo { //PrimaryKey [FreeSql.DataAnnotations.Column(IsIdentity = true, IsPrimary = true)] public Guid OrderId { get; set; } public string Title { get; set; } public int Index { get; set; } public DateTime CreateDate { get; set; } public string Memo { get; set; } }


這時候我們用 GUI 工具看一下 SQLite 的檔案

表格自動建立,資料也進去了,舒服~~




3.查詢資料,這邊我就是查詢一筆使用 OrderId 查詢,還有根據 Index 這數字型態的欄位直接使用 LINQ 語法查詢

var dbPath = AppDomain.CurrentDomain.BaseDirectory + "sampleSQLite.db"; var freeSQLiteDB = new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.Sqlite, "data source=" + dbPath) .UseAutoSyncStructure(true) .Build(); //查詢一筆 var repoOrderInfo = freeSQLiteDB.GetRepository<OrderInfo>(); var orderId = Guid.Parse(input: "d1111111-2222-3333-4444-955227c9912d"); var res1 = repoOrderInfo.Select.Where(x => x.OrderId == orderId).First(); Console.WriteLine(JsonConvert.SerializeObject(res1)); //查詢條件 Index>=50 & Index<=100 var res2 = repoOrderInfo.Select.Where(x => x.Index>50 && x.Index<=100).ToList(); Console.WriteLine(JsonConvert.SerializeObject(res2));


這邊就簡單介紹,之後再分享一些心得,其實官方文件寫的很多也蠻清楚的

只是很多地方真的要自己實測過在上戰場會比較好,因為很多時候執行結果跟我想像的有點不太一樣

可能是我太少寫 SQL 了,畢竟認識我都知道 我 NoSQL 寫太多了

官方文件:

https://freesql.net/



當麻許的碎念筆記 2014 | Donma Hsu Design.