基于ABP做一个简单的系统——实战篇:2.代码生成器
上一篇正说着呢,代码生成器就来了。
1.适用于ABP官网的Startup Template V3.x的包含了登录、用户等页面的MPA应用模板
2.当前view仅支持文本框生成,远期规划根据字段类型生成不同的控件
3.只需要写好Entity,剩下的交给代码生成器,一键生成所有重复代码。
4.基于winform,脱离VS存在,只要有.net framework,什么环境都能运行起来。
下载链接放在最后
使用方法及其简单:
1.按照规则,编写Entity实体类. 规则如下:
1)命名空间统一用复数,类名用单数,方便代码维护
2)如果时String类型字段,需要加一个MaxFieldLengthd的静态int变量,不仅用于code-first生成数据库时使用,也用于DTO字段长度限制,也会在生成视图时自动加上maxlength属性
3)每个字段都要加上FieldDisplay格式的静态String变量,用于dto,view的字段名称显示
4)如果是必填字段,打上Required属性,Entity不需要加DisplayName属性!保持如下干净的状态即可。
5)建议每个entity都加上String类型字段Name,用于模糊查询
using Abp.Domain.Entities.Auditing; using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Text; namespace Rock.DictBooks { [Table("ai_dict_book")] public class DictBook : FullAuditedEntity<long> { public const int MaxDictNameLength = 128; public const int MaxItemNameLength = 128; public const int MaxItemDescLength = 512; public const string DictNameDisplay = "字典名称"; public const string ItemNameDisplay = "数据项名称"; public const string ItemDescDisplay = "数据项描述"; [Required] [StringLength(MaxDictNameLength)] public string DictName { get; set; } [Required] [StringLength(MaxItemNameLength)] public string ItemName { get; set; } [StringLength(MaxItemDescLength)] public string ItemDesc { get; set; } } }
2.修改“\src\Rock.EntityFrameworkCore\EntityFrameworkCore\RockDbContext.cs”,新增一行“public DbSet<EntityName> EntityNames { get; set; }”,把其中的ENtityName换成实际的实体名称。
3.并Add-Migration "xxx",Update-Database(做过code-first的都懂)
4..启动代码生成器,设置好实体类文件路径,项目根目录,命名空间(下载模板时的“Choose your project's name”),实体中文面描述,主键类型,点击生成代码
5.修改“\src\Rock.Web.Mvc\Startup\PageNames.cs”,增加一行“ public const string Test = "Test";”,把其中的Test换成实际的页面名称
6.修改\src\Rock.Core\Localization\SourceFiles\Rock-zh-Hans.xml,新增一行“<text name="Default">默认页面</text>”,是为了代码生成器生成的页面中文翻译,这里的Default更改为实际页面名称,下同
7.修改“\src\Rock.Core\Authorization\PermissionNames.cs”,新增一行“ public const string Pages_Default = "Pages.Default";”
8.修改"\src\Rock.Core\Authorization\RockAuthorizationProvider.cs",新增一行“context.CreatePermission(PermissionNames.Pages_Default, L("Default"));”,是为了给新增页面赋予默认权限
9.修改“\src\Rock.Web.Mvc\Startup\RockNavigationProvider.cs”,增加以下代码,加入菜单
.AddItem( new MenuItemDefinition( PageNames.Test, L("Default"), url: "Test", icon: "fas fa-info-circle", permissionDependency: new SimplePermissionDependency(PermissionNames.Pages_Default) ) )
这时候编译程序,运行,就可以打开默认模板生成的页面了
V 1.0默认模板只生成基本的增删改查功能,所有内容录入都为文本框,后续版本会根据字段类型生成不同类型的输入框。程序是基于Razor引擎开发的,所以只要你懂Razor语法,tpl文件可以按自己的意思修改,全部放在Template目录下。代码写的比较早,等我整理一下再开源吧。不用T4是因为每个项目都要手动生成,而且还经常进程锁死,很闹心,所以自己弄了个。
P.S. 需要.net framework 4.5.2才能运行
使用方法:解压,运行Winform.exe即可
链接:https://pan.baidu.com/s/1jormHZBRZyPOj3ijLagG_g
提取码:v21l
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构