ABP(ASP.NET Boilerplate Project)快速入门
ztj100 2024-12-22 22:02 21 浏览 0 评论
前言
这两天看了一下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,弄清楚他的设计理念以及他的一些实现原理。
以后有时间的话再深入学习一下。文中如果有不妥之处欢迎指正。
原文地址:https://www.cnblogs.com/xhznl/p/13197706.html
相关推荐
- Vue3非兼容变更——函数式组件(vue 兼容)
-
在Vue2.X中,函数式组件有两个主要应用场景:作为性能优化,因为它们的初始化速度比有状态组件快得多;返回多个根节点。然而在Vue3.X中,有状态组件的性能已经提高到可以忽略不计的程度。此外,有状态组...
- 利用vue.js进行组件化开发,一学就会(一)
-
组件原理/组成组件(Component)扩展HTML元素,封装可重用的代码,核心目标是为了可重用性高,减少重复性的开发。组件预先定义好行为的ViewModel类。代码按照template\styl...
- Vue3 新趋势:10 个最强 X 操作!(vue.3)
-
Vue3为前端开发带来了诸多革新,它不仅提升了性能,还提供了...
- 总结 Vue3 组件管理 12 种高级写法,灵活使用才能提高效率
-
SFC单文件组件顾名思义,就是一个.vue文件只写一个组件...
- 前端流行框架Vue3教程:17. _组件数据传递
-
_组件数据传递我们之前讲解过了组件之间的数据传递,...
- 前端流行框架Vue3教程:14. 组件传递Props效验
-
组件传递Props效验Vue组件可以更细致地声明对传入的props的校验要求...
- 前端流行框架Vue3教程:25. 组件保持存活
-
25.组件保持存活当使用...
- 5 个被低估的 Vue3 实战技巧,让你的项目性能提升 300%?
-
前端圈最近都在卷性能优化和工程化,你还在用老一套的Vue3开发方法?作为摸爬滚打多年的老前端,今天就把私藏的几个Vue3实战技巧分享出来,帮你在开发效率、代码质量和项目性能上实现弯道超车!一、...
- 绝望!Vue3 组件频繁崩溃?7 个硬核技巧让性能暴涨 400%!
-
前端的兄弟姐妹们五一假期快乐,谁还没在Vue3项目上栽过跟头?满心欢喜写好的组件,一到实际场景就频频崩溃,页面加载慢得像蜗牛,操作卡顿到让人想砸电脑。用户疯狂吐槽,领导脸色难看,自己改代码改到怀疑...
- 前端流行框架Vue3教程:15. 组件事件
-
组件事件在组件的模板表达式中,可以直接使用...
- Vue3,看这篇就够了(vue3 从入门到实战)
-
一、前言最近很多技术网站,讨论的最多的无非就是Vue3了,大多数都是CompositionAPI和基于Proxy的原理分析。但是今天想着跟大家聊聊,Vue3对于一个低代码平台的前端更深层次意味着什么...
- 前端流行框架Vue3教程:24.动态组件
-
24.动态组件有些场景会需要在两个组件间来回切换,比如Tab界面...
- 前端流行框架Vue3教程:12. 组件的注册方式
-
组件的注册方式一个Vue组件在使用前需要先被“注册”,这样Vue才能在渲染模板时找到其对应的实现。组件注册有两种方式:全局注册和局部注册...
- 焦虑!Vue3 组件频繁假死?6 个奇招让页面流畅度狂飙 500%!
-
前端圈的朋友们,谁还没在Vue3项目上踩过性能的坑?满心期待开发出的组件,一到高并发场景就频繁假死,用户反馈页面点不动,产品经理追着问进度,自己调试到心态炸裂!别以为这是个例,不少人在电商大促、数...
- 前端流行框架Vue3教程:26. 异步组件
-
根据上节课的代码,我们在切换到B组件的时候,发现并没有网络请求:异步组件:...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- idea eval reset (50)
- vue dispatch (70)
- update canceled (42)
- order by asc (53)
- spring gateway (67)
- 简单代码编程 贪吃蛇 (40)
- transforms.resize (33)
- redisson trylock (35)
- 卸载node (35)
- np.reshape (33)
- torch.arange (34)
- npm 源 (35)
- vue3 deep (35)
- win10 ssh (35)
- vue foreach (34)
- idea设置编码为utf8 (35)
- vue 数组添加元素 (34)
- std find (34)
- tablefield注解用途 (35)
- python str转json (34)
- java websocket客户端 (34)
- tensor.view (34)
- java jackson (34)
- vmware17pro最新密钥 (34)
- mysql单表最大数据量 (35)