前言
這兩天看了一下ABP,做個簡單的學習記錄。記錄主要有以下内容:
- 從官網建立并下載下傳項目(.net core 3.x + vue)
- 項目在本地成功運作
- 新增實體并映射到資料庫
- 完成對新增實體的基本增删改查
ABP官網:https://aspnetboilerplate.com/
Github:https://github.com/aspnetboilerplate
建立項目
進入官網

Get started,選擇前後端技術棧,我這裡就選.net core 3.x和vue。
填寫自己的項目名稱,郵箱,然後點create my project就可以下載下傳項目了。
解壓檔案
運作項目
後端項目
首先運作後端項目,打開/aspnet-core/MyProject.sln
改一下MyProject.Web.Host項目下appsettings.json的資料庫連接配接字元串,如果本地安裝了mssql,用windows身份認證,不改也行
資料庫預設是使用mssql的,當然也可以改其他資料庫。
将MyProject.Web.Host項目設定為啟動項,打開程式包管理器控制台,預設項目選擇DbContext所在的項目,也就是MyProject.EntityFrameworkCore。執行
update-database
資料庫已成功建立:
Ctrl+F5,不出意外,浏覽器就會看到這個界面:
前端項目
後端項目成功運作了,下面運作一下前端項目,先要確定本機有nodejs環境并安裝了vue cli,這個就不介紹了。
/vue目錄下打開cmd執行:
npm install
install完成後執行:
npm run serve
打開浏覽器通路http://localhost:8080/,不出意外的話,會看到這個界面:
使用預設使用者 admin/123qwe 登入系統:
至此,前後端項目都已成功運作。
那麼基于abp的二次開發該從何下手呢,最簡單的,比如要增加一個資料表,并且完成最基本CRUD該怎麼做?
新增實體
實體類需要放在MyProject.Core項目下,我建立一個MyTest檔案夾,并新增一個Simple類,随意給2個屬性。
我這裡繼承了abp的Entity類,Entity類有主鍵ID屬性,這個泛型int是指主鍵的類型,不寫預設就是int。abp還有一個比較複雜的FullAuditedEntity類型,繼承FullAuditedEntity的話就有建立時間,修改時間,建立人,修改人,軟删除等字段。這個看實際情況。
public class Simple : Entity<int>
{
public string Name { get; set; }
public string Details { get; set; }
}
修改MyProject.EntityFrameworkCore項目的/EntityFrameworkCore/MyProjectDbContext:
public class MyProjectDbContext : AbpZeroDbContext<Tenant, Role, User, MyProjectDbContext>
{
/* Define a DbSet for each entity of the application */
public DbSet<Simple> Simples { get; set; }
public MyProjectDbContext(DbContextOptions<MyProjectDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Simple>(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
重新整理資料庫,Simples表已生成:
實體的增删改查
進入MyProject.Application項目,建立一個MyTest檔案夾
Dto
CreateSimpleDto,新增Simple資料的傳輸對象,比如ID,建立時間,建立人等字段,就可以省略
public class CreateSimpleDto
{
public string Name { get; set; }
public string Details { get; set; }
}
PagedSimpleResultRequestDto,分頁查詢對象
public class PagedSimpleResultRequestDto : PagedResultRequestDto
{
/// <summary>
/// 查詢關鍵字
/// </summary>
public string Keyword { get; set; }
}
SimpleDto,這裡跟CreateSimpleDto的差別就是繼承了EntityDto,多了個ID屬性
public class SimpleDto : EntityDto<int>
{
public string Name { get; set; }
public string Details { get; set; }
}
SimpleProfile,用來定義AutoMapper的映射關系清單
public class SimpleProfile : Profile
{
public SimpleProfile()
{
CreateMap<Simple, SimpleDto>();
CreateMap<SimpleDto, Simple>();
CreateMap<CreateSimpleDto, Simple>();
}
}
Service
注意,類名參考abp的規範去命名。
ISimpleAppService,Simple服務接口。我這裡繼承IAsyncCrudAppService,這個接口中包含了增删改查的基本定義,非常友善。如果不需要的話,也可以繼承IApplicationService自己定義
public interface ISimpleAppService : IAsyncCrudAppService<SimpleDto, int, PagedSimpleResultRequestDto, CreateSimpleDto, SimpleDto>
{
}
SimpleAppService,Simple服務,繼承包含了增删改查的AsyncCrudAppService類,如果有需要的話可以override這些增删改查方法。也可以繼承MyProjectAppServiceBase,自己定義。
public class SimpleAppService : AsyncCrudAppService<Simple, SimpleDto, int, PagedSimpleResultRequestDto, CreateSimpleDto, SimpleDto>, ISimpleAppService
{
public SimpleAppService(IRepository<Simple, int> repository) : base(repository)
{
}
/// <summary>
/// 條件過濾
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
protected override IQueryable<Simple> CreateFilteredQuery(PagedSimpleResultRequestDto input)
{
return Repository.GetAll()
.WhereIf(!input.Keyword.IsNullOrWhiteSpace(), a => a.Name.Contains(input.Keyword));
}
}
接口測試
重新運作項目,不出意外的話,Swagger中就會多出Simple相關的接口。
- Create
- Get
- GetAll
- Update
- Delete
總結
ABP是一個優秀的架構,基于ABP的二次開發肯定會非常高效,但前提是需要熟練掌握ABP,弄清楚他的設計理念以及他的一些實作原理。
以後有時間的話再深入學習一下。文中如果有不妥之處歡迎指正。
——本文使用【Typora】+【EasyBlogImageForTypora】編輯
歡迎關注我的公衆号,一起學習。
如果本文對您有所幫助,您可以點選右下方的【推薦】按鈕支援一下;文中如有不妥之處,還望指正,非常感謝!!!
作者:xhznl
出處:http://www.cnblogs.com/xhznl/
文章可以轉載,但請注明出處