基於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即可
鏈接://pan.baidu.com/s/1jormHZBRZyPOj3ijLagG_g
提取碼:v21l