【低碼】asp.net core 實體類可生產 CRUD 後臺管理介面

FreeSql發表於2022-05-19

前言介紹

喜歡小規模團隊的"單打獨鬥",有的時候即使在大公司,也經常做著3-5個人團隊的小專案,相信很多人有類似的經歷。

本文介紹如何將專案中已存在的【實體類】,直接生產出 CRUD 後臺管理介面。

對於通用後臺管理系統的生成,除了單純的對單表 crud 操作外,我還喜歡利用導航屬性的操作,比如:

1、Song、Tag 多對多場景,新增/更新 Song 時可以把 Tag 一起儲存;

2、列表頁,希望外來鍵、多對多出現在過濾篩選條件;

3、列表頁,希望列舉出現在過濾篩選條件;

4、刪除時,級聯刪除所有相關資料;

等等諸如此類的繁瑣操作,之所以說繁瑣,是因為這些工作技術不難,屬於嚴重的重複勞動。

在人員配備苛刻的環境下,選擇儘量靠工具提高生產效率,這樣我們才有更多的時間在上班摸魚。。。


演示功能

  • Domain 目錄下的檔案是【實體類】
  • Program.cs 是 asp.net core 啟動程式碼
using FreeSql;
using ojbk.Entities;

var fsql = new FreeSql.FreeSqlBuilder()
    .UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=test.db;Pooling=true;Max Pool Size=10")
    .UseAutoSyncStructure(true)
    .UseNoneCommandParameter(true)
    .UseMonitorCommand(cmd => Console.WriteLine(cmd.CommandText + "\r\n"))
    .Build();

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddControllersWithViews();
builder.Services.AddSingleton(fsql);
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseAuthorization();
app.MapControllers();

app.UseDefaultFiles();
app.UseStaticFiles();

/******************************* 以下是核心程式碼 **************************/
app.UseFreeAdminLtePreview("/",
    typeof(Config),
    typeof(Role),
    typeof(Menu),
    typeof(User),

    typeof(Department),
    typeof(Employee),
    typeof(Position),

    typeof(AppLog),
    typeof(LoginLog),
    typeof(OprationLog),

    typeof(IdleScheduler.TaskInfo),
    typeof(IdleScheduler.TaskLog)
);

app.Run();

既然 ORM 已經對實體進行了配置,利用已存在的條件便利的產生後臺管理功能,真是一大快事!!

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

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

輸出:後臺管理的功能

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

先發幾張執行後的圖片嚐個鮮:

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


機制設定

1、新增、修改資料

中件間產生的介面包括新增、修改資料的功能,普通實體的根據屬性的型別與 Html5 UI 一一對映;

比較特殊的對映規則:

c# 型別 Html5
布林 核取方塊
列舉 下拉選擇
日期 日期控制元件
ManyToOne 導航屬性 下拉選擇
ManyToMany 導航屬性 多選器

等等。。。

什麼情況會產生【上傳檔案】控制元件?
有興趣的可以瞭解原始碼,目前沒有開放在外部配置。


2、列表查詢、過濾篩選

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

除此外,還提供了過濾條件的支援,規則是根據導航屬性(ManyToOne、ManyToMany)。比如【崗位】,內含有【部門 Department】、【員工 Employee】、【角色 Role】,則【崗位】列表頁會出現按【分類】篩選的UI,詳見上面的 demo 示意圖,或者下載 demo 執行;


3、刪除資料

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

並且支援了複雜導航屬性關係的級聯刪除功能,而這個功能不依賴資料庫外來鍵;


下載 Demo

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

執行環境:.net6.0

https://files.cnblogs.com/files/FreeSql/freesql.adminlte.preview.zip

第一步:

dotnet restore

第二步:

dotnet run

將監聽的地址複製,開啟 chrome 瀏覽器貼上訪問。


思考人生

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

這個擴充套件包簡單的輸入,產生巨量的功能反饋。但由於生成的程式碼是 mvc + razor + jquery + AdminLTE,決定它很難在這個時代開花結果。

思路方向應該不會有問題,因為真的太方便了,如果生成後的程式碼是 Service + Vue + ElementUI,並且還提供了預設通用許可權、定時任務等功能,就問香不香?

期待有興趣志同道合的人改造。

若有使用疑問請留言,謝謝!

QQ群:4336577(已滿)、8578575(線上)、52508226(線上)

github:https://github.com/2881099

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

相關文章