最近研究了一個我之前看到很有興趣的東西,最近再重新評估工具的時候測試一下
就想說順便把這套件介紹給大家這就是 FreeSql

他是來自於中國的前輩們,社群很活絡,而且文件很多都是中文,只是最近再測試工具,所以就想說測試一下
這篇文章,不會寫太多,單純就寫 Upsert 還有查詢,其他我就不測試了,對我來說通常 Upsert 跟 查詢比較常用到
因為他支持很多資料庫,甚至很多是我沒聽過的,今天主要我測試是使用 SQLite
1. 因為我測試是使用 SQLite ,所以必須先安裝 FreeSql.Provider.Sqlite , FreeSql.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();
//新增一筆
var o1 = new OrderInfo { OrderId = orderId, Index = 99, Title = "order99-ttile", CreateDate = DateTime.Now, Memo = "測試99-單筆測試" };
repoOrderInfo.InsertOrUpdate(o1);
//一次新增多筆
List inputData = new List();
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().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();
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/