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

前言

這两天看了一下ABP,做個簡單的學習記錄。記錄主要有以下內容:

  1. 從官網創建並下載項目(.net core 3.x + vue)
  2. 項目在本地成功運行
  3. 新增實體並映射到數據庫
  4. 完成對新增實體的基本增刪改查

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 mytest1update-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,弄清楚他的設計理念以及他的一些實現原理。

以後有時間的話再深入學習一下。文中如果有不妥之處歡迎指正。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

南投搬家公司費用需注意的眉眉角角,別等搬了再說!

新北清潔公司,居家、辦公、裝潢細清專業服務