前言
FreeSql 釋出至今已經有9個月,功能漸漸完善,自身的生态也逐漸形成,早在幾個月前寫過一篇文章《ORM 開發環境之利器:MVC 中間件 FreeSql.AdminLTE》,您可以先閱讀上一篇文章内容了解來龍去脈,再回到這裡觀看。
我個人非常喜歡小規模團隊的"單打獨鬥",有的時候即使在大公司,也是做着3-5個人團隊的小項目,相信不少人有類似的經曆。
從上一篇文章可以看出,早先的 FreeSql.AdminLTE 隻不過是花瓶,應用場景非常有限,僅僅在開發環境時管理測試資料的用途,這之後的幾個月其實我基本沒使用它。。。是不是很尴尬??
本次功能更新情況有所改觀,且先看完本文内容。
- 我喜歡已有的管理功能,希望可以在預設産生的功能上進行二次開發;
- 我喜歡盡量簡單,容易上手,二次開發難度别要太大。
說到開源還是先貼上源碼倉庫吧:https://github.com/2881099/FreeSql.AdminLTE,主項目 FreeSql 目前有900多星,歡迎同時給贊,謝謝!
項目背景
對于通用背景管理系統的生成,除了單純的對單表 crud 操作外,我還喜歡有外鍵的操作,比如:
1、Song、Tag 多對多場景,添加/更新 Song 時可以把 Tag 一起儲存;
2、清單頁,希望外鍵、多對多出現在過濾篩選條件;
3、清單頁,希望枚舉出現在過濾篩選條件;
等等諸如此類的繁瑣操作,之是以說繁瑣,是因為這些工作技術不難,屬于嚴重的重複勞動。
在人員配備苛刻的環境下,選擇盡量靠工具提高生産效率,這樣我們才有更多的時間在上班摸魚。。。
既然 ORM 已經對實體進行了配置,利用已存在的條件便利的産生背景管理功能,真是一大快事!!
功能庫劃分
項目 | 版本 |
---|---|
FreeSql.AdminLTE | netstandard2.0、net45 |
FreeSql.AdminLTE.Tools | netcoreapp2.1 |
FreeSql.AdminLTE.Preview | netstandard2.0 |
三個包産生的 AdminLTE 功能幾乎一樣,都是根據實體類、導航關系生成預設的繁瑣的背景管理功能。
共同的輸入條件:
- 實體類的注釋(請開啟項目XML文檔);
- 實體類的導航屬性配置(可生成繁瑣的常用背景管理功能)。
.NETCore MVC 中間件,基于 AdminLTE 前端架構動态産生指定 FreeSql 實體的增删查改的【預覽管理功能】。
使用場景:開發環境的測試資料生産。
dotnet add package FreeSql.AdminLTE.Preview
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IFreeSql>(fsql);
}
public void Configure(IApplicationBuilder app)
{
app.UseFreeAdminLtePreview("/testadmin/",
typeof(TestDemo01.Entitys.Song),
typeof(TestDemo01.Entitys.Tag));
}
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5SMjNTNiFWN5UGO1UWL2Y2Y40SOlFTMtMWYwYTLwgjY5cTYzYWL4MjN5IjM2UzLclTM1YDOyYTMvwVbvNmL05WZ052bjJXZzVnY1hGdpdmLzV2Zh1WatIXZzV3Lc9CX6MHc0RHaiojIsJye.png)
根據 FreeSql 實體類配置、導航關系配置,快速生成基于 MVC + Razor + AdminLTE 的背景管理系統的增删查改代碼【支援二次開發】。
使用場景:asp.net/asp.netcore 背景管理系統快速生成,二次開發【自定義】。
dotnet add package FreeSql.AdminLTE
using (var gen = new FreeSql.AdminLTE.Generator(new GeneratorOptions()))
{
gen.Build("d:/test/", new[] { typeof(TestDemo01.Entitys.Song) }, false);
}
提醒!提醒!提醒!
生成後的 Controller、Razor 代碼依賴 FreeSql.DbContext 庫,請手工添加
重磅功能:FreeSql.AdminLTE.Tools
什麼樣的工具更加高效?
指令行。。。指令行。。。指令行。。。必須是它!!!
簡單介紹一下Global Tools,它是.NET Core 2.1 中一個初次出現的特性。Global Tools提供了一種方法,讓開發人員編寫的.NET Core應用可以打包成NuGet包傳遞。如果.NET Core運作在目标平台上,那麼一個恰當打包的Global Tool就可以在那上面運作。JavaScript開發人員可能會發現一件有趣的事,就是這個工具直接借鑒了NPM Global Tools。
FreeSql.AdminLTE.Tools 是對 FreeSql.AdminLTE 功能的工具指令化封裝,指令行快速生成代碼。
使用場景:asp.netcore 背景管理系統快速生成,二次開發。
dotnet tool install -g FreeSql.AdminLTE.Tools
進入背景項目(可以是空項目、或已存在的項目),執行以下指令
FreeSql.AdminLTE.Tools -Find MyTest.Model..+
指令行參數 | 說明 |
---|---|
-Find | * 比對實體類FullName的正規表達式 |
-ControllerNameSpace | 控制器命名空間(預設:FreeSql.AdminLTE) |
-ControllerRouteBase | 控制器請求路徑前辍(預設:/AdminLTE/) |
-ControllerBase | 控制器基類(預設:Controller) |
-First | 是否生成 ApiResult.cs、index.html、htm 靜态資源(首次生成) |
-Output | 輸出路徑(預設:目前目錄) |
打開 command 指令行,執行效果如下:
>dotnet tool install -g FreeSql.AdminLTE.Tools
可使用以下指令調用工具: FreeSql.AdminLTE.Tools
已成功安裝工具“freesql.adminlte.tools”(版本“0.9.4”)。
>FreeSql.AdminLTE.Tools
____ ____ __
/ __/ ____ ___ ___ / __/ ___ _ / /
/ _/ / __// -_)/ -_) _\ \ / _ `/ / /
/_/ /_/ \__/ \__/ /___/ \_, / /_/
/_/
# Github # https://github.com/2881099/FreeSql
基于 .NETCore 2.1 環境,在控制台目前目錄的項目下,根據實體類生成 AdminLTE 背景管理功能的相關檔案。
# 生成條件 #
1、實體類的注釋(請開啟項目XML文檔);
2、實體類的導航屬性配置(可生成繁瑣的常用背景管理功能)。
# 快速開始 #
> FreeSql.AdminLTE.Tools -Find MyTest\.Model\..+
-Find * 比對實體類FullName的正規表達式
-ControllerNameSpace 控制器命名空間(預設:FreeSql.AdminLTE)
-ControllerRouteBase 控制器請求路徑前辍(預設:/AdminLTE/)
-ControllerBase 控制器基類(預設:Controller)
-First 是否生成 ApiResult.cs、index.html、htm 靜态資源(首次生成)
-Output 輸出路徑(預設:目前目錄)
# 生成到其他目錄 #
> FreeSql.AdminLTE.Tools -Find MyTest\.Model\..+ -Output d:/test
示範
1、在桌面建立目錄:MyProject
2、打開 cmd,進行 MyProject 目錄,win10 下打開 MyProject 目錄點選位址欄錄入 cmd 可快速打開 cmd,并且目錄為目前位址
3、執行 dotnet new webapi
C:\Users\28810\Desktop\MyProject>dotnet new webapi
已成功建立模闆“ASP.NET Core Web API”。
正在處理建立後操作...
正在 C:\Users\28810\Desktop\MyProject\MyProject.csproj 上運作 "dotnet restore"...
正在還原 C:\Users\28810\Desktop\MyProject\MyProject.csproj 的包...
正在生成 MSBuild 檔案 C:\Users\28810\Desktop\MyProject\obj\MyProject.csproj.nuget.g.props。
正在生成 MSBuild 檔案 C:\Users\28810\Desktop\MyProject\obj\MyProject.csproj.nuget.g.targets。
C:\Users\28810\Desktop\MyProject\MyProject.csproj 的還原在 1.11 sec 内完成。
還原成功。
4、執行 dotnet add package FreeSql.Provider.Sqlite
5、執行 dotnet add package FreeSql.DbContext
6、建立幾個常用的實體類,點選下載下傳示範的實體類
7、确定項目可以編譯通過
C:\Users\28810\Desktop\MyProject>dotnet build
用于 .NET Core 的 Microsoft (R) 生成引擎版本 15.9.20+g88f5fadfbe
版權所有(C) Microsoft Corporation。保留所有權利。
C:\Users\28810\Desktop\MyProject\MyProject.csproj 的還原在 65.32 ms 内完成。
MyProject -> C:\Users\28810\Desktop\MyProject\bin\Debug\netcoreapp2.2\MyProject.dll
MyProject -> C:\Users\28810\Desktop\MyProject\bin\Debug\netcoreapp2.2\MyProject.Views.dll
已成功生成。
0 個警告
0 個錯誤
已用時間 00:00:01.82
8、執行 FreeSql.AdminLTE.Tools -Find MyProject.Model..+ -First
請開啟項目 xml 文檔生成功能,再執行此操作
9、運作項目,執行 dotnet run
由于這是一個普通 webapi 項目,沒有開啟靜态資源通路,是以請在 Startup.cs 中修改:
public class Startup
{
public Startup()
{
Fsql = new FreeSql.FreeSqlBuilder()
.UseConnectionString(FreeSql.DataType.Sqlite, @"Data Source=|DataDirectory|/test.db;Pooling=true;Max Pool Size=5")
.UseAutoSyncStructure(true)
.Build();
}
public static IFreeSql Fsql { get; private set; }
public void ConfigureServices(IServiceCollection services)
{
services.AddSingleton<IFreeSql>(Fsql);
services.AddMvc();
}
public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory)
{
app.UseDeveloperExceptionPage();
app.UseMvc();
app.UseDefaultFiles();
app.UseStaticFiles();
}
}
10、打開浏覽器通路上一步提示的位址,比如:http://localhost:57844/adminlte/index.html
感悟
不是不喜歡用 vue,其實我會用,精不精通另外說。。隻是覺得 vue 小規模作戰不夠快捷。
FreeSql.AdminLTE.Tools 指令行操作,可快速批量或單個生成實體類 razor + controller 的增删查改方法,該指令暫時無法支援 .net framework 項目,asp.net mvc 項目可以考慮引入 FreeSql.AdminLTE 庫自定義代碼生成。
FreeSql.AdminLTE 後續可更新的内容很小,感興趣的小夥伴,可以采用同樣的模式做 FreeSql.ElementUI 也不是也可能,對吧?反正有 FreeSql 提供基礎保障。
若有使用疑問請留言,謝謝!
github: https://github.com/2881099