日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.NETStandard FreeSql v0.0.9 功能预览

發布時間:2023/12/4 asp.net 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .NETStandard FreeSql v0.0.9 功能预览 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

年關將至,首頁技術含量文章真是越來越少,理解大家盼著放假過年,哥們我何嘗不是,先給大家拜個早年。

兄弟我從11月底發了神經,開啟了 ORM 功能庫的開發之旅,歷時兩個月編碼和文檔整理,目前預覽版本更新到 v0.0.9 仍是一個初級版本,怎奈今天把 wiki 文檔更新到一半,突然想寫一篇文章提前向大家介紹項目。

快過年還逼著您來了解新的技術,實在是抱歉了。介紹一下自己,有一些朋友可能知道我本人,我經常會在群里放開源項目,比如 dotnetGen、csredis 等,反感之余仍然希望可以真的幫助到有需要的人,CSRedisCore 正是本人維護的項目,本文介紹的不是它。

簡單點介紹,FreeSql 是一個NETStandard ORM 功能庫,采用 MIT 開源協議部署在 github。

它實現了的功能特性

  • [x] CodeFirst 遷移。

  • [x] DbFirst 從數據庫導入實體類,支持三種模板生成器。

  • [x] 采用 ExpressionTree 高性能讀取數據。

  • [x] 類型映射深入支持,比如pgsql的數組類型。

  • [x] 支持豐富的表達式函數。

  • [x] 支持導航屬性查詢,和延時加載。

  • [x] 支持同步/異步數據庫操作方法,豐富多彩的鏈式查詢方法。

  • [x] 支持事務。

  • [x] 支持讀寫分離。

  • [x] 支持多種數據庫,MySql/SqlServer/PostgreSQL/Oracle/Sqlite。

快速開始

定義實體

可從現有數據庫生成實體模型,提供 IDbFirst 生成實體模型。或者手動創建模型,基于模型創建或修改數據庫,提供 ICodeFirst 同步結構的 API(甚至可以做到開發階段自動同步)。

查詢

普通查詢

每頁20條數據,查詢第1頁

var sql = select.Page(1, 20).ToSql();///SELECT ... FROM `tb_topic` a LIMIT 0,20

利用導航屬性聯表

子表 Exists 查詢

查找今天創建的數據

select.Where(a => a.CreateTime.Date == DateTime.Now.Date).ToSql();

支持功能豐富的表達式函數解析,包括(字符串、日期、時間、數學、類型轉換)等函數,方便程序員在不了解數據庫函數的情況下編寫代碼。這是非常特色的功能之一,深入細化函數解析盡量做到滿意,所支持的類型基礎都可以使用對應的表達式函數,例如 日期、字符串、IN查詢、數組(PostgreSQL的數組)、字典(PostgreSQL HStore)等等。

獲得查詢返回的數據

采用 ExpressionTree 優化讀取速讀,如果懂技術的你一定知道 .NETCore 技術下除了原生代碼,最快就是 Emit 和 ExpressionTree。項目在初期使用的反射+緩存,雖然 .NETCore 優化了反射性能,但經過與Dapper性能測試對比之后,發現仍然有一定差距,改成 ExpresstionTree 后才與 Dapper 性能相當。FreeSql 支持的類型較多,現實 ExpressionTree 的復雜度較大,有興趣的朋友可以翻閱源代碼。

返回單條記錄

Topic t1 = select.Where(a => a.Id == 1).ToOne();

FreeSql有兩個約定,ToOne 永遠返回 null 或 有數據的實體對象,ToList 永遠返回非 null 的 List<實體類型>

返回 List

List<Topic> t1 = select.Where(a => a.Id > 0).Skip(100).Limit(200).ToList();

返回 List + 導航屬性的數據

List<Topic> t2 = select.LeftJoin(a => a.Type.Guid == a.TestTypeInfoGuid).ToList();//此時會返回普通字段 + 導航對象 Type 的數據

指定字段返回

執行SQL返回數據

CodeFirst

支持 CodeFirst 遷移結構至數據庫,這應該是(O/RM)必須標配的一個功能。

與其他(O/RM)不同FreeSql支持更多的數據庫特性,而不只是支持基礎的數據類型,這既是優點也是缺點,優點是充分利用數據庫特性輔助開發,缺點是切換數據庫變得困難。不同程序員的理念可能不太一致,作為功能庫FreeSql支持到了極致,至于是否使用是項目組技術衡量的另一個問題。

盡管多種數據庫適配邏輯非常復雜,FreeSql始終秉承優化程序開發習慣的原則盡量去現實,中間碰到了一些非技術無法攻克的難題,比如數據庫的自定義類型,和實體類本身就是一種沖突,為了減少使用成本,諸如此類的數據庫功能沒有得到支持。

除了在實體上標注特性,也支持實體以外配置

類型映射

csharpMySqlSqlServerPostgreSQLOracleSqlite
bool | bool?bit(1)bitboolnumber(1)boolean
sbyte | sbyte?tinyint(3)smallintint2number(4)smallint
short | short?smallint(6)smallintint2number(6)smallint
int | int?int(11)intint4number(11)integer
long | long?bigint(20)bigintint8number(21)integer
byte | byte?tinyint(3) unsignedtinyintint2number(3)int2
ushort | ushort?smallint(5) unsignedintint4number(5)unsigned
uint | uint?int(10) unsignedbigintint8number(10)decimal(10,0)
ulong | ulong?bigint(20) unsigneddecimal(20,0)numeric(20,0)number(20)decimal(21,0)
double | double?doublefloatfloat8float(126)double
float | float?floatrealfloat4float(63)float
decimal | decimal?decimal(10,2)decimal(10,2)numeric(10,2)number(10,2)decimal(10,2)
Guid | Guid?char(36)uniqueidentifieruuidchar(36 CHAR)character(36)
TimeSpan | TimeSpan?timetimetimeinterval day(2) to second(6)bigint
DateTime | DateTime?datetimedatetimetimestamptimestamp(6)datetime
DateTimeOffset | DateTimeOffset?--datetimeoffsettimestamp(6) with local time zone-
Enum | Enum?enumintint4number(16)mediumint
FlagsEnum | FlagsEnum?setbigintint8number(32)bigint
byte[]varbinary(255)varbinary(255)byteablobblob
stringvarchar(255)nvarchar(255)varchar(255)nvarchar2(255)nvarchar(255)
MygisPointpoint----
MygisLineStringlinestring----
MygisPolygonpolygon----
MygisMultiPointmultipoint----
MygisMultiLineStringmultilinestring----
MygisMultiPolygonmultipolygon----
BitArray--varbit(64)--
NpgsqlPoint | NpgsqlPoint?--point--
NpgsqlLine | NpgsqlLine?--line--
NpgsqlLSeg | NpgsqlLSeg?--lseg--
NpgsqlBox | NpgsqlBox?--box--
NpgsqlPath | NpgsqlPath?--path--
NpgsqlPolygon | NpgsqlPolygon?--polygon--
NpgsqlCircle | NpgsqlCircle?--circle--
(IPAddress Address, int Subnet) | (IPAddress Address, int Subnet)?--cidr--
IPAddress--inet--
PhysicalAddress--macaddr--
NpgsqlRange<int> | NpgsqlRange<int>?--int4range--
NpgsqlRange<long> | NpgsqlRange<long>?--int8range--
NpgsqlRange<decimal> | NpgsqlRange<decimal>?--numrange--
NpgsqlRange<DateTime> | NpgsqlRange<DateTime>?--tsrange--
PostgisPoint--geometry--
PostgisLineString--geometry--
PostgisPolygon--geometry--
PostgisMultiPoint--geometry--
PostgisMultiLineString--geometry--
PostgisMultiPolygon--geometry--
PostgisGeometry--geometry--
PostgisGeometryCollection--geometry--
Dictionary<string, string>--hstore--
JToken--jsonb--
JObject--jsonb--
JArray--jsonb--
數組--以上所有類型都支持--

以上類型和長度是默認值,可手工設置,如 string 屬性可指定 [Column(DbType = "varchar(max)")]

DbFirst

FreeSql 同樣支持 DbFirst 的開發模式,即先有數據庫再有項目,這種傳統的開發模式永遠不會過時,特別適合老項目仍然在維護,或者數據庫重構成本過高的項目。關系型數據庫有許多成熟的運維和開發類配套工具,例如我們所關注的ER圖工具 PowerdeSigner,使用它可以更直觀的查看表之間的關系。除了FreeSql作者同時在維護超過十年的代碼生成器dotnetGen項目,它是一款支持超快速開發且高度可控的解決方案,非常喜歡 DbFirst 的開發模式,因此在 FreeSql for DbFirst 功能上會有不錯的支持。

DbFirst 模式開發主要提供了不同數據庫的表結構查詢適配,配合模板生成器現實從數據庫導入模型到c#代碼中。

生成器是基于 DbFirst 開發的輔助工具,適用老項目一鍵生成實體。生成器采用模板的方式,實現了三種生成模板:

模板名稱路徑類型映射外鍵導航屬性緩存管理失血貧血充血
simple-entity../Templates/MySql/simple-entityXXXX
simple-entity-navigation-object../Templates/MySql/simple-entity-navigation-objectXXX
rich-entity-navigation-object../Templates/MySql/rich-entity-navigation-objectXX

結語

項目功能與文檔較多,許多細節不適合在一篇文章中展示詳盡,更多的功能介紹請移步 github wiki 中心。借此文章介紹FreeSql這個國產ORM,希望能得到大家的支持。

FreeSql 口號:打造 .NETCore 最方便的 ORM!

項目地址:https://github.com/2881099/FreeSql

文檔中心:https://github.com/2881099/FreeSql/wiki

最后誠心邀請您的參與加入,一起完成 FreeSql 的使命。

原文地址:https://www.cnblogs.com/kellynic/p/10310484.html


.NET社區新聞,深度好文,歡迎訪問公眾號文章匯總 http://www.csharpkit.com


總結

以上是生活随笔為你收集整理的.NETStandard FreeSql v0.0.9 功能预览的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。