[开源] 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));
}


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/2881099
[开源] FreeSql.AdminLTE.Tools 根据实体类生成后台管理代码的更多相关文章
- [开源] FreeSql.AdminLTE 功能升级
前言 FreeSql 发布至今已经有9个月,功能渐渐完善,自身的生态也逐步形成,早在几个月前写过一篇文章<ORM 开发环境之利器:MVC 中间件 FreeSql.AdminLTE>,您可以 ...
- EF:根据实体类生成表结构SQL
根据实体类生成表结构SQL: PM> Enable-Migrations -ProjectName Domain -StartUpProjectName Handler -Force PM> ...
- C#实体类生成XML与XML Schema文档
一.实体类生成XML private void CreateXML() { Type[] objType = DBEntityRegst(); foreach (var item in objType ...
- C# T4 模板 数据库实体类生成模板(带注释,娱乐用)
说明:..,有些工具生成实体类没注释,不能和SqlServer的MS_Description属性一起使用,然后照着网上的资源,随便写了个生成模板,自娱自乐向,其实卵用都没有参考教程 1.htt ...
- Jpa实体类生成图解
Jpa实体类生成图解 创建连接 创建项目
- 【干货分享】C# 实体类生成工具
前言: 项目实战中不论是业务编码还是通用编码,总会归纳出一些通用的工具类.放入项目中一劳永逸,让兄弟姐妹们避免编写重复代码.所以利用了工作之余的时间,将这些散落在多个项目中精致优雅的工具类,归纳起来形 ...
- 通过实体类生成建表SQL语句实现方法
import java.io.File; import java.io.FileOutputStream; import java.lang.reflect.Field; import java.ut ...
- Swagger结合mustache模板生成后台接口代码、以及前后台建模代码
之前项目中使用的的thrift来建模,维护前后台模型以及rest接口,前台使用的是angular2: 但是使用thrift只能生成建模,后台的rest接口的Controller文件还是需要手动去写,一 ...
- 简单理解ORM,实体类生成查询SQL语句
目前有很多开源的ORM项目,大多情况下也不需要我们重复去造轮子,我们只需要了解轮子怎么造的,怎么用就可以,下面简单说一下怎么通过实体生成一个SQL语句: 先建立2个Attribute类,TableAt ...
随机推荐
- Linux 软链接和硬链接简介
在Linux系统中,将文件分为两个部分:用户数据和元数据. 元数据(inode) 元数据即文件的索引节点(inode),用来记录文件的权限(r.w.x).文件的所有者和属组.文件的大小.文件的状态改变 ...
- MySQL数据库之互联网常用架构方案
一.数据库架构原则 高可用 高性能 一致性 扩展性 二.常见的架构方案 方案一:主备架构,只有主库提供读写服务,备库冗余作故障转移用 jdbc:mysql://vip:3306/xxdb 高可用分析: ...
- js事件(十二)
一.事件三要素1.事件目标[谁触发的该事件(引起该事件触发的源头:target)]2.事件处理程序[处理相应事件的函数]3.事件对象[触发事件产生的携带事件信息的对象] 二.事件流[从页面中接受事件的 ...
- Django:实现读写分离
库的配置 1.读写分离 settings配置 #settings.py 配置库信息,生成2个库 DATABASES = { 'default': { 'ENGINE': 'django.db.back ...
- Redis_初识
一.简介 Redis(Remote Dictionary Server)本质上是一个Key-Value类型的内存数据库,整个数据库统统加载在内存当中进行操作,定期通过异步操作吧数据库flush到硬盘上 ...
- 经典sql server基础语句不全
1.几个简单的基本的sql语句 选择: select * from table1 where 范围 插入: insert into table1(field1,field2) values(value ...
- ubuntu16.04重置root密码
问题描述: 一个用户不能G附加多个用户组,在centos没有问题的.具体的还不清楚 问题解决: 重启进入启动项修改启动参数进入root中设置密码 参考: https://www.cnblogs.c ...
- HTML&CSS基础-html常用的标签
HTML&CSS基础-html常用的标签 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.html的源代码 <!DOCTYPE html> <html& ...
- 读react源码准备
git源码地址:https://github.com/facebook/react react 里面就是 react源码 react里面的react文件夹就是react源码,react源码非常的少,总 ...
- Kotlin反射操纵构造方法与伴生对象
反射操纵伴生对象: 先定义一个伴生对象: 然后咱们通过反射来调用一下它: 比较简单. 反射操纵构造方法: 先来定义一个类: 然后咱们通过反射来调用一个其中的方法,之前当然就得先来调用构造方法,由于我们 ...