基於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
提取碼: