前言
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
来源: https://www.cnblogs.com/kellynic/p/11444176.html