上一篇正说着呢,代码生成器就来了。

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 = ;
public const int MaxItemNameLength = ;
public const int MaxItemDescLength = ; 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

基于ABP做一个简单的系统——实战篇:2.代码生成器的更多相关文章

  1. 基于ABP做一个简单的系统——实战篇:1.项目准备

    现阶段需要做一个小项目,体量很小,业务功能比较简单,就想到用最熟悉的.net来做,更何况现在.net core已经跨平台,也可以在linux服务器上部署.所以决定用.net core 3.1+mysq ...

  2. 基于ABP做一个简单的系统——实战篇:4.基于富文本编辑器,Razor模板引擎生成内容并导出Word 填坑记录

    起因 需求是这样的,有一种协议需要生成,协议的模板是可配置的,在生成过程中,模板中的内容可以根据约定的标记进行替换(就像mvc的razor模板一样).生成后的内容还需要导出成word或pdf. 常见的 ...

  3. 使用React并做一个简单的to-do-list

    1. 前言 说到React,我从一年之前就开始试着了解并且看了相关的入门教程,而且还买过一本<React:引领未来的用户界面开发框架 >拜读.React的轻量组件化的思想及其virtual ...

  4. 用Qt写软件系列三:一个简单的系统工具(上)

    导言 继上篇<用Qt写软件系列二:QIECookieViewer>之后,有一段时间没有更新博客了.这次要写的是一个简单的系统工具,需求来自一个内部项目.功能其实很简单,就是查看当前当前系统 ...

  5. Jmeter初步使用二--使用jmeter做一个简单的性能测试

    经过上一次的初步使用,我们懂得了Jmeter的安装与初步使用的方法.现在,我们使用Jmeter做一个简单的性能测试.该次测试,提交的参数不做参数化处理,Jmeter各元件使用将在介绍在下一博文开始介绍 ...

  6. 使用Multiplayer Networking做一个简单的多人游戏例子-3/3(Unity3D开发之二十七)

    使用Multiplayer Networking做一个简单的多人游戏例子-1/3 使用Multiplayer Networking做一个简单的多人游戏例子-2/3 使用Multiplayer Netw ...

  7. HTTP lab01 做一个简单的测试用 web页面

      做一个简单的测试用 web页面     1.安装httpd服务   yum install httpd   安装完httpd服务后,系统就自动生成了/var/www/html目录     创建一个 ...

  8. 程序猿修仙之路--数据结构之你是否真的懂数组? c#socket TCP同步网络通信 用lambda表达式树替代反射 ASP.NET MVC如何做一个简单的非法登录拦截

    程序猿修仙之路--数据结构之你是否真的懂数组?   数据结构 但凡IT江湖侠士,算法与数据结构为必修之课.早有前辈已经明确指出:程序=算法+数据结构  .要想在之后的江湖历练中通关,数据结构必不可少. ...

  9. 基于PHP实现一个简单的在线聊天功能(轮询ajax )

    基于PHP实现一个简单的在线聊天功能(轮询ajax ) 一.总结 1.用的轮询ajax 二.基于PHP实现一个简单的在线聊天功能 一直很想试着做一做这个有意思的功能,感觉复杂的不是数据交互和表结构,麻 ...

随机推荐

  1. P2444 [POI2000]病毒 AC自动机

    P2444 [POI2000]病毒 #include <bits/stdc++.h> using namespace std; ; struct Aho_Corasock_Automato ...

  2. STM32 HAL库学习系列---定时器TIM 输入捕获功能

    基本方法 1.设置TIM2 CH1为输入捕获功能: 2.设置上升沿捕获: 3.使能TIM2 CH1捕获功能: 4.捕获到上升沿后,存入capture_buf[0],改为捕获下降沿: 5.捕获到下降沿后 ...

  3. Java Number & Math类

    java Number类 Java的内置数据类型有byte.int.long.double等. Java 语言为每一个内置数据类型提供了对应的包装类. int对应的包装类为Integer long对应 ...

  4. AVL树的创建--C语言实现

    AVL树是一种自平衡(Self-balancing)二叉查找树(Binary Search Tree),要求任何一个节点的左子树和右子树的高度之差不能超过1. AVL树的插入操作首先会按照普通二叉查找 ...

  5. HDU1588

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1588 题目大意:g(i)= k * i + b. 给定 k 和 b,求0 <= i < n ...

  6. Life In Changsha College- SQA计划与验收测试规程

    本次任务 以前面小组完成的SCRUM设计任务作为背景,拟制软件开发任务的虚拟SQA计划. 编制前面小组完成的SCRUM设计任务的验收测试规程. SQA计划 验收测试规程 测试分析:工程完成的功能包括登 ...

  7. JSP指令 & 中文乱码问题

    1. JSP 指令: JSP指令(directive)是为JSP引擎而设计的,     它们并不直接产生任何可见输出, 而只是告诉引擎如何处理JSP页面中的其余部分. 2. 在JSP 2.0中,定义了 ...

  8. 抽象类(abstract class)与抽象方法

    package cm.aff.abst; /* abstract:抽象的,,可以修饰类,方法 1.修饰类: 抽象类: ①不能被实例化 ②有构造器的 ③凡是类都有构造器 ④抽象方法所修饰的类一定是抽象类 ...

  9. BZOJ1001 狼抓兔子 题解

    裸的最小割,转化成最大流即可. #include <bits/stdc++.h> int n,m; int S,T; int mincost; int head[6001000],tot= ...

  10. SpringBoot 定制 starter 启动器

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 在实际项目开发中,我们常常会用到各种各样的 starter,这些starter 有的是有 springb ...