FreeSql是一個功能強大的 .NET ORM 功能庫,支持 .NetFramework 4.0+、.NetCore 2.1+、Xamarin 等支持 NetStandard 所有運行平台。
QQ群:4336577(已滿)、8578575(在線)
模型
FreeSql 使用模型執行數據訪問,模型由實體類表示數據庫表或視圖,用於查詢和保存數據。
可從現有數據庫生成實體模型,FreeSql 提供 IDbFirst 接口實現生成實體模型。
或者手動創建模型,基於模型創建或修改數據庫,提供 ICodeFirst 同步結構的 API(甚至可以做到開發階段自動同步)。
using FreeSql.DataAnnotations;
using System;
public class Blog
{
[Column(IsIdentity = true, IsPrimary = true)]
public int BlogId { get; set; }
public string Url { get; set; }
public int Rating { get; set; }
}
聲明
dotnet add packages FreeSql.Provider.Sqlite
static IFreeSql fsql = new FreeSql.FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=|DataDirectory|\db1.db")
.UseAutoSyncStructure(true) //自動同步實體結構到數據庫
.Build(); //請務必定義成 Singleton 單例模式
注意: IFreeSql 在項目中應以單例聲明,而不是在每次使用的時候創建。
遷移
程序運行中FreeSql會檢查AutoSyncStructure參數,以此條件判斷是否對比實體與數據庫結構之間的變化,達到自動遷移的目的。
查詢
var blogs = fsql.Select<Blog>()
.Where(b => b.Rating > 3)
.OrderBy(b => b.Url)
.Skip(100)
.Limit(10) //第100行-110行的記錄
.ToList();
插入
var blog = new Blog { Url = "http://sample.com" };
blog.BlogId = (int)fsql.Insert<Blog>()
.AppendData(blog)
.ExecuteIdentity();
更新
fsql.Update<Blog>()
.Set(b => b.Url, "http://sample2222.com")
.Where(b => b.Url == "http://sample.com")
.ExecuteAffrows();
刪除
fsql.Delete<Blog>()
.Where(b => b.Url == "http://sample.com")
.ExecuteAffrows();
FreeSqlBuilder
| 方法 | 返回值 | 說明 |
|---|---|---|
| UseConnectionString | this | 設置連接串 |
| UseSlave | this | 設置從數據庫,支持多個 |
| UseConnectionFactory | this | 設置自定義數據庫連接對象(放棄內置對象連接池技術) |
| UseAutoSyncStructure | this | 【開發環境必備】自動同步實體結構到數據庫,程序運行中檢查實體創建或修改表結構 |
| UseNoneCommandParameter | this | 不使用命令參數化執行,針對 Insert/Update,也可臨時使用 IInsert/IUpdate.NoneParameter() |
| UseGenerateCommandParameterWithLambda | this | 生成命令參數化執行,針對 lambda 表達式解析 |
| UseLazyLoading | this | 開啟延時加載功能 |
| UseMonitorCommand | this | 監視全局 SQL 執行前后 |
| UseNameConvert | this | 自動轉換實體、屬性名稱 Entity Property -> Db Filed |
| UseExitAutoDisposePool | this | 監聽 AppDomain.CurrentDomain.ProcessExit/Console.CancelKeyPress 事件自動釋放連接池 (默認true) |
| Build<T> | IFreeSql<T> | 創建一個 IFreeSql 對象,注意:單例設計,不要重復創建 |
ConnectionStrings
DataType.MySql
Data Source=127.0.0.1;Port=3306;User ID=root;Password=root; Initial Catalog=cccddd;Charset=utf8; SslMode=none;Min pool size=1
DataType.PostgreSQL
Host=192.168.164.10;Port=5432;Username=postgres;Password=123456; Database=tedb;Pooling=true;Minimum Pool Size=1
DataType.SqlServer
Data Source=.;Integrated Security=True;Initial Catalog=freesqlTest;Pooling=true;Min Pool Size=1
DataType.Oracle
user id=user1;password=123456; data source=//127.0.0.1:1521/XE;Pooling=true;Min Pool Size=1
DataType.Sqlite
Data Source=|DataDirectory|\document.db; Attachs=xxxtb.db; Pooling=true;Min Pool Size=1
DataType.MsAccess
Provider=Microsoft.Jet.OleDb.4.0;Data Source=d:/accdb/2003.mdb;max pool size=5
DataType.Dameng(達夢)
server=127.0.0.1;port=5236;user id=2user;password=123456789;database=2user;poolsize=5
DataType.ShenTong(神通)
HOST=192.168.164.10;PORT=2003;DATABASE=OSRDB;USERNAME=SYSDBA;PASSWORD=szoscar55;MAXPOOLSIZE=2
DataType.OdbcMySql
Driver={MySQL ODBC 8.0 Unicode Driver}; Server=127.0.0.1;Persist Security Info=False; Trusted_Connection=Yes;UID=root;PWD=root; DATABASE=cccddd_odbc;Charset=utf8; SslMode=none;Min Pool Size=1
DataType.OdbcSqlServer
Driver={SQL Server};Server=.;Persist Security Info=False; Trusted_Connection=Yes;Integrated Security=True; DATABASE=freesqlTest_odbc; Pooling=true;Min Pool Size=1
DataType.OdbcOracle
Driver={Oracle in XE};Server=//127.0.0.1:1521/XE; Persist Security Info=False; Trusted_Connection=Yes;UID=odbc1;PWD=123456; Min Pool Size=1
DataType.OdbcPostgreSQL
Driver={PostgreSQL Unicode(x64)};Server=192.168.164.10; Port=5432;UID=postgres;PWD=123456; Database=tedb_odbc;Pooling=true;Min Pool Size=1
DataType.OdbcDameng (達夢)
Driver={DM8 ODBC DRIVER};Server=127.0.0.1:5236; Persist Security Info=False; Trusted_Connection=Yes; UID=USER1;PWD=123456789
DataType.OdbcKingbaseES (人大金倉)
Driver={KingbaseES 8.2 ODBC Driver ANSI};Server=127.0.0.1;Port=54321;UID=USER2;PWD=123456789;database=TEST
DataType.Odbc
Driver={SQL Server};Server=.;Persist Security Info=False; Trusted_Connection=Yes;Integrated Security=True; DATABASE=freesqlTest_odbc; Pooling=true;Min pool size=1
Packages
| Package Name | Version | 說明 |
|---|---|---|
| FreeSql.Repository | NETStandard2.0、net45、net40 | 通用倉儲 + UnitOfWork 實現 |
| FreeSql.DbContext | NETStandard2.0、net45、net40 | EFCore 的使用風格實現 |
| FreeSql.Provider.MySql | NETStandard2.0、net45、net40 | 基於 MySql.Data(Oracle官方) |
| FreeSql.Provider.MySqlConnector | NETStandard2.0、net45 | 基於 MySqlConnector |
| FreeSql.Provider.PostgreSQL | NETStandard2.0、net45 | 基於 PostgreSQL 9.5+ |
| FreeSql.Provider.SqlServer | NETStandard2.0、net45、net40 | 基於 SqlServer 2005+ |
| FreeSql.Provider.SqlServerForSystem | NETStandard2.0、net45、net40 | 基於 System.Data.SqlClient + SqlServer 2005+ |
| FreeSql.Provider.Sqlite | NETStandard2.0、net45、net40 | |
| FreeSql.Provider.Oracle | NETStandard2.0、net45、net40 | |
| FreeSql.Provider.MsAccess | NETStandard2.0、net45、net40 | |
| FreeSql.Provider.Dameng | NETStandard2.0、net45、net40 | 基於 達夢數據庫 |
| FreeSql.Provider.ShenTong | NETStandard2.0、net45、net40 | 基於 神州通用數據庫 |
| FreeSql.Provider.Odbc | NETStandard2.0、net45、net40 | 基於 ODBC |
| FreeSql.Extensions.LazyLoading | NETStandard2.0、net45、net40 | 延時屬性擴展包 |
| FreeSql.Extensions.JsonMap | NETStandard2.0、net45、net40 | Json 序列化擴展包 |
| FreeSql.Extensions.Linq | NETStandard2.0、net45、net40 | LinqToSql IQueryable 擴展包 |
| FreeSql.Extensions.BaseEntity | NETStandard2.0 | |
| FreeSql.Extensions.Generator | NETCoreapp3.1 | 從數據庫生成實體類 |
系列文章導航
-
(一)入門
