zoukankan      html  css  js  c++  java
  • [开源] 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

  • 相关阅读:
    HDU 5486 Difference of Clustering 图论
    HDU 5481 Desiderium 动态规划
    hdu 5480 Conturbatio 线段树 单点更新,区间查询最小值
    HDU 5478 Can you find it 随机化 数学
    HDU 5477 A Sweet Journey 水题
    HDU 5476 Explore Track of Point 数学平几
    HDU 5475 An easy problem 线段树
    ZOJ 3829 Known Notation 贪心
    ZOJ 3827 Information Entropy 水题
    zoj 3823 Excavator Contest 构造
  • 原文地址:https://www.cnblogs.com/FreeSql/p/11462872.html
Copyright © 2011-2022 走看看