• [开源] FreeSql.AdminLTE.Tools 根据实体类生成后台管理代码


    前言

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

    image

    image

    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:Users28810DesktopMyProject>dotnet new webapi
    已成功创建模板“ASP.NET Core Web API”。
    
    正在处理创建后操作...
    正在 C:Users28810DesktopMyProjectMyProject.csproj 上运行 "dotnet restore"...
      正在还原 C:Users28810DesktopMyProjectMyProject.csproj 的包...
      正在生成 MSBuild 文件 C:Users28810DesktopMyProjectobjMyProject.csproj.nuget.g.props。
      正在生成 MSBuild 文件 C:Users28810DesktopMyProjectobjMyProject.csproj.nuget.g.targets。
      C:Users28810DesktopMyProjectMyProject.csproj 的还原在 1.11 sec 内完成。
    
    还原成功。
    

    4、执行 dotnet add package FreeSql.Provider.Sqlite

    5、执行 dotnet add package FreeSql.DbContext

    6、创建几个常用的实体类,点击下载演示的实体类

    7、确定项目可以编译通过

    C:Users28810DesktopMyProject>dotnet build
    用于 .NET Core 的 Microsoft (R) 生成引擎版本 15.9.20+g88f5fadfbe
    版权所有(C) Microsoft Corporation。保留所有权利。
    
      C:Users28810DesktopMyProjectMyProject.csproj 的还原在 65.32 ms 内完成。
      MyProject -> C:Users28810DesktopMyProjectinDebug
    etcoreapp2.2MyProject.dll
      MyProject -> C:Users28810DesktopMyProjectinDebug
    etcoreapp2.2MyProject.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

  • 相关阅读:
    Error: Client network socket disconnected before secure TLS connection was established
    python对文章词频的统计
    IntelliJ IDEA创建java空项目
    java提取docx文件中的图片
    vue v-for 循环复选框-默认勾选第一个的实现方法
    nodejs的request创建的get和post请求,带参数
    python list转换字符串报错TypeError: sequence item 0: expected str instance, int found
    linux常用命令
    ES9(2018) 正则表达式命名捕获组
    ESLint+Prettier代码规范实践
  • 原文地址:https://www.cnblogs.com/FreeSql/p/11462872.html
Copyright © 2020-2023  润新知