C# 資料操作系列 - 19 FreeSql 入坑介紹
阿新 • • 發佈:2020-05-29
# 0. 前言
> 前幾天FreeSql的作者向我推薦了FreeSql框架,想讓我幫忙寫個文章介紹一下。嗯,想不到我也能帶個貨了。哈哈,開個玩笑~看了下覺得設計的挺有意思的,所以就謝了這篇文章。
簡單介紹一下,FreeSql 是NCC組織的沙盒級專案,是一款功能強大的 ORM 元件,支援 .NET Core、.NET Framework 和 Xamarin。目前 FreeSql 支援以下資料庫:MySQL、PostgreSQL、SqlServer、Oracle、Sqlite、Odbc、微軟 Access 以及國產資料庫達夢。
也就是說也是一個由國內優秀開發者維護的優秀專案,初步看了下功能很齊全。小夥伴們有時間可以取瞅瞅。下圖是我從它GitHub倉庫裡複製過來的。可以看見支援的功能還是相當多的。
![img](https://img2020.cnblogs.com/other/1266612/202005/1266612-20200529114532217-2099337004.png)
> 關於NCC社群,是.net core的一個開源社群,也是國內最大的.net core開源社群
# 1. 初步使用
照例,沒安裝就沒有呼叫。所以,在建立專案之後,安裝一下吧:
```bash
dotnet add package FreeSql
```
然後建立一個IFreeSql物件:
```c#
public class FreeSqlContext
{
public static IFreeSql FreeSqlConnect { get; } =
new FreeSql.FreeSqlBuilder() .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=document.db")
.UseAutoSyncStructure(true) //自動同步實體結構到資料庫
.Build();
}
```
因為官方要求將IFreeSql物件宣告為單例模式,所以我在這裡使用了靜態屬性。
> 這種寫法是C#的一種語法糖,只有get表示該屬性是一個只能讀的屬性(與只讀屬性有個微妙的差距),等號後面表示該屬性第一次賦值的內容。
建立一個普通的Model類:
```c#
public class Model
{
public int Id { get; set; }
public int StringLength { get; set; }
public string Name { get; set; }
}
```
## 1.1 簡單插入
然後試一下插入資料:
```c#
var row = FreeSqlContext.FreeSqlConnect.Insert(new Model
{
Name = "測試",
StringLength = 10
}).ExecuteAffrows();
```
![image-20200528103357431](https://img2020.cnblogs.com/other/1266612/202005/1266612-20200529114532487-882993465.png)
提示如圖內容,需要我們手動安裝一下FreeSql的SQLite驅動,安裝之後:
```bash
dotnet add packages FreeSql.Provider.Sqlite
```
FreeSql針對各種受支援的資料庫都單獨開發了驅動包,統一命名為:
```c#
FreeSql.Provider.<資料庫型別>
```
安裝完成後,重新執行後順利完成執行,順便幫你把資料庫也生成好了(這一點我感覺挺好的),同時生成了一個主鍵為Id的Model表:
```sql
create table Model
(
Id INTEGER
primary key,
StringLength INTEGER not null,
Name NVARCHAR(255)
);
```
## 1.2 簡單查詢
接下來簡單的查詢一下剛剛插入的資料:
```c#
var list = FreeSqlContext.FreeSqlConnect.Queryable