ORM 開發環境之利器:MVC 中間件 FreeSql.AdminLTE


前言

這是一篇純技術干貨的分享文章,FreeSql 已經基本完成 .NETCore 最方便的 ORM 使命,我們正在籌備生態的建立,比如 ABP 中如何使用 FreeSql 的實現,需要各種各樣的擴展包,好多好多工作量。有沒有大神願意無償參與做這件事情,好吧。。應該沒有人!!

大約是在三天前,因為使用 FreeSql 的某項目需要做一個簡單的后台功能,以便錄入或管理數據。在實施的過程中好懷念當初 dotnetGen 生成器的味道,用它產生 curd 基本功能幾乎是秒做;

然后今天發表的 FreeSql.AdminLTE 主角,已經實現了相關功能,它是怎么干這個事情的,且看下面內容;

功能介紹

它是 FreeSql 衍生出來的 .NETCore MVC 中間件擴展包,基於 AdminLTE 前端框架動態產生實體的增刪查改界面;

輸入:實體1、實體2、實體3

輸出:后台管理的功能

只需要傳入實體,就可以形成 curd 的管理功能,是不是有些騷啊~~~

先發一張運行后的圖片嘗個鮮:

這是根據實體產生 curd 界面的 mvc 中間件,開發時預覽數據好方便啊。看完預覽圖不由得再感嘆一次 FreeSql 的易用性,那句口號:做 .NETCore 最方便的 ORM! 沒有說錯。。。作者多次提及:“我們是日式簡約風格,沒那么復雜的用法”,也驗證了這一點。。

添加/修改

中件間產生的界面包括添加、修改數據的功能,普通實體的根據屬性的類型與 Html5 UI 一一映射;

比較特殊的映射規則:

c# 類型 Html5
布爾 復選框
枚舉 下拉選擇
日期 日期控件
ManyToOne 導航屬性 下拉選擇
ManyToMany 導航屬性 多選器

等等。。。

什么情況會產生【上傳文件】控件?
有興趣的可以了解源碼,目前沒有開放在外部配置。

查詢/過濾

中件間為每個實體提供了分頁列表查詢,每頁為20條數據;

除此外,還提供了過濾條件的支持,規則是根據導航屬性(ManyToOne、ManyToMany)。比如【文章實體】,內含有【分類id】+【分類對象】,則【文章】列表頁會出現按【分類】篩選的UI,詳見上面的 demo 示意圖,或者下載對應的 demo 版本運行;

刪除

中件間為每個實體提供了批量刪除的功能;

測試 demo

我們習慣用 sqlite 做測試庫,測試完畢直接刪除目錄,不留垃圾數據,所以下面的 demo 不需要修改任何地方,運行時自動建庫、建表;

提供 .net core 2.1、2.2 兩種環境的測試 demo 下載:

Demo for dotnet 2.1.zipDemo for dotnet 2.2.zip

image

第一步:

dotnet restore

第二步:

dotnet run

思考

一番驚喜過后,你應該會考慮實用性,這樣做有什么價值,可用於什么樣的場景?

這個擴展包簡單的輸入,產生巨量的功能反饋。目前來說它是死板的,對外提供的擴展性幾乎為零,這樣也就限定了它的應用場景。

不合適的場景

1、它不可替代我們自身開發的后台管理系統;

2、它不適合擺放在公網正式環境,存在數據安全問題;

3、歡迎補充。。。;

談談定位

目前的定位是這樣的,在開發環境中使用,查閱預覽實體數據,同時也比較方便的管理測試數據。

一段擁有無比力量的小段代碼,也是中間件界面的功能開啟:

//可以配置子目錄訪問,如:/testadmin/
app.UseFreeAdminLTE("/",
    typeof(Entities.Song),
    typeof(Entities.Tag));

其他

本次測試的實體有 versionRow 字段(樂觀鎖),當不修改內容時,點按鈕后不會執行SQL。

如何判定?可以回到列表,看 versionRow 的值沒變化,如果執行了SQL,它的值會增加。

不執行 SQL 有啥單獨可說的?這就牽連到 FreeSql.DbContext 了,是它過濾了執行操作,有興趣可移步了解;

樂觀鎖

FreeSql (樂觀鎖)說明:

更新整個實體數據時,在並發情況下極容易造成舊數據將新的記錄更新。

行級鎖的原理,是利用實體某字段,如:long version,更新前先查詢數據,此時 version 為 1,更新時產生的 SQL 會附加 where version = 1,當修改失敗時(即 Affrows == 0)拋出異常。

每個實體只支持一個行級鎖屬性,在屬性前標記特性:[Column(IsVersion = true)] 即可。

適用 SetSource 更新,每次更新 version 的值都會增加 1

收官

FreeSql.AdminLTE 目前已經定版了,差不多已經把 dotnetGen 支持的功能都遷移了過來,完成了它應有的職責定位。

下一個擴展包也非常有意思,歡迎持續關注我們,做 .NETCore 最方便的 ORM !

QQ群:4336577(已滿)、8578575(在線)

github:

https://github.com/2881099/FreeSql

https://github.com/2881099/FreeSql.AdminLTE


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM