前言
這兩天看了一下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
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,弄清楚他的設計理念以及他的一些實作原理,
以后有時間的話再深入學習一下,文中如果有不妥之處歡迎指正,
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/6436.html
標籤:.NET Core
