1. 程式人生 > >ABP(ASP.NET Boilerplate Project)快速入門

ABP(ASP.NET Boilerplate Project)快速入門

# 前言 這兩天看了一下ABP,做個簡單的學習記錄。記錄主要有以下內容: 1. 從官網建立並下載專案(.net core 3.x + vue) 2. 專案在本地成功執行 3. 新增實體並對映到資料庫 4. 完成對新增實體的基本增刪改查 ABP官網:https://aspnetboilerplate.com/ Github:https://github.com/aspnetboilerplate # 建立專案 進入官網 ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627100457868-170119983.png) Get started,選擇前後端技術棧,我這裡就選.net core 3.x和vue。 ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627100647685-2090498988.png) 填寫自己的專案名稱,郵箱,然後點create my project就可以下載專案了。 ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627100918563-2094721135.png) 解壓檔案 ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627102510273-1984153044.png) # 執行專案 ## 後端專案 首先執行後端專案,開啟/aspnet-core/MyProject.sln ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627102114156-216837578.png) 改一下MyProject.Web.Host專案下appsettings.json的資料庫連線字串,如果本地安裝了mssql,用windows身份認證,不改也行 ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627103950359-1210972586.png) 資料庫預設是使用mssql的,當然也可以改其他資料庫。 將MyProject.Web.Host專案設定為啟動項,開啟程式包管理器控制檯,預設專案選擇DbContext所在的專案,也就是MyProject.EntityFrameworkCore。執行`update-database` ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627104427236-1141298040.png) 資料庫已成功建立: ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627104650285-1366503271.png) Ctrl+F5,不出意外,瀏覽器就會看到這個介面: ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627104847414-338522314.png) ## 前端專案 後端專案成功運行了,下面執行一下前端專案,先要確保本機有nodejs環境並安裝了vue cli,這個就不介紹了。 /vue目錄下開啟cmd執行:`npm install` ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627105827060-1630520275.png) install完成後執行:`npm run serve` ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627110024817-53125415.png) 開啟瀏覽器訪問http://localhost:8080/,不出意外的話,會看到這個介面: ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627110339033-46455551.png) 使用預設使用者 admin/123qwe 登入系統: ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627110508174-741570768.png) 至此,前後端專案都已成功執行。 那麼基於abp的二次開發該從何下手呢,最簡單的,比如要增加一個數據表,並且完成最基本CRUD該怎麼做? # 新增實體 實體類需要放在MyProject.Core專案下,我新建一個MyTest資料夾,並新增一個Simple類,隨意給2個屬性。 ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627113800717-635021028.png) 我這裡繼承了abp的Entity類,Entity類有主鍵ID屬性,這個泛型int是指主鍵的型別,不寫預設就是int。abp還有一個比較複雜的FullAuditedEntity型別,繼承FullAuditedEntity的話就有建立時間,修改時間,建立人,修改人,軟刪除等欄位。這個看實際情況。 ``` public class Simple : Entity { public string Name { get; set; } public string Details { get; set; } } ``` 修改MyProject.EntityFrameworkCore專案的/EntityFrameworkCore/MyProjectDbContext: ``` public class MyProjectDbContext : AbpZeroDbContext { /* Define a DbSet for each entity of the application */ public DbSet Simples { get; set; } public MyProjectDbContext(DbContextOptions options) : base(options) { } protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); modelBuilder.Entity(p => { p.ToTable("Simples", "test"); p.Property(x => x.Name).IsRequired(true).HasMaxLength(20); p.Property(x => x.Details).HasMaxLength(100); }); } } ``` 然後就可以遷移資料庫了,程式包管理器控制檯執行:`add-migration mytest1`,`update-database` ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627115048131-2123033570.png) 重新整理資料庫,Simples表已生成: ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627115950665-1424626700.png) # 實體的增刪改查 進入MyProject.Application專案,新建一個MyTest資料夾 ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627124056350-400123291.png) ## Dto CreateSimpleDto,新增Simple資料的傳輸物件,比如ID,建立時間,建立人等欄位,就可以省略 ``` public class CreateSimpleDto { public string Name { get; set; } public string Details { get; set; } } ``` PagedSimpleResultRequestDto,分頁查詢物件 ``` public class PagedSimpleResultRequestDto : PagedResultRequestDto { /// /// 查詢關鍵字 ///
public string Keyword { get; set; } } ``` SimpleDto,這裡跟CreateSimpleDto的區別就是繼承了EntityDto,多了個ID屬性 ``` public class SimpleDto : EntityDto { public string Name { get; set; } public string Details { get; set; } } ``` SimpleProfile,用來定義AutoMapper的對映關係清單 ``` public class SimpleProfile : Profile { public SimpleProfile() { CreateMap(); CreateMap(); CreateMap(); } } ``` ## Service 注意,類名參考abp的規範去命名。 ISimpleAppService,Simple服務介面。我這裡繼承IAsyncCrudAppService,這個介面中包含了增刪改查的基本定義,非常方便。如果不需要的話,也可以繼承IApplicationService自己定義 ``` public interface ISimpleAppService : IAsyncCrudAppService { } ``` SimpleAppService,Simple服務,繼承包含了增刪改查的AsyncCrudAppService類,如果有需要的話可以override這些增刪改查方法。也可以繼承MyProjectAppServiceBase,自己定義。 ``` public class SimpleAppService : AsyncCrudAppService, ISimpleAppService { public SimpleAppService(IRepository repository) : base(repository) { } /// /// 條件過濾 ///
/// /// protected override IQueryable CreateFilteredQuery(PagedSimpleResultRequestDto input) { return Repository.GetAll() .WhereIf(!input.Keyword.IsNullOrWhiteSpace(), a => a.Name.Contains(input.Keyword)); } } ``` ## 介面測試 重新執行專案,不出意外的話,Swagger中就會多出Simple相關的介面。 ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627130744917-1655287996.png) - Create ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627131029796-1315680981.png) ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627131120431-831899305.png) - Get ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627131349678-286797860.png) ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627131413832-513887384.png) - GetAll ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627131547775-48419930.png) ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627131608590-91559163.png) - Update ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627131706912-822599511.png) ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627131729470-463138682.png) - Delete ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627131801785-1425833934.png) ![](https://img2020.cnblogs.com/blog/610959/202006/610959-20200627131820860-673778571.png) # 總結 ABP是一個優秀的框架,基於ABP的二次開發肯定會非常高效,但前提是需要熟練掌握ABP,弄清楚他的設計理念以及他的一些實現原理。 以後有時間的話再深入學習一下。文中如果有不妥之處歡迎