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

前言

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

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

而後今天發表的 FreeSql.AdminLTE 主角,已經實現了相關功能,它是怎麼幹這個事情的,且看下面內容;github

功能介紹

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

輸入:實體一、實體二、實體3c#

輸出:後臺管理的功能安全

只須要傳入實體,就能夠造成 curd 的管理功能,是否是有些騷啊~~~前端框架

先發一張運行後的圖片嚐個鮮:併發

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

添加/修改

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

比較特殊的映射規則:

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

等等。。。

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

查詢/過濾

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

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

刪除

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

測試 demo

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

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

Demo for dotnet 2.1.zipDemo for dotnet 2.2.zip

image

第一步:

dotnet restore

第二步:

dotnet run

思考

一番驚喜事後,你應該會考慮實用性,這樣作有什麼價值,可用於什麼樣的場景?

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

不合適的場景

一、它不可替代咱們自身開發的後臺管理系統;

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

三、歡迎補充。。。;

談談定位

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

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

//能夠配置子目錄訪問,如:/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)

github:

https://github.com/2881099/FreeSql

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

相關文章
相關標籤/搜索