1. 程式人生 > >[開源] FreeSql.AdminLTE 功能升級

[開源] FreeSql.AdminLTE 功能升級

前言

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文件);
  • 實體類的導航屬性配置(可生成繁瑣的常用後臺管理功能)。

FreeSql.AdminLTE.Preview

.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));
}

FreeSql.AdminLTE

根據 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/2881