ABP项目逻辑实现
ABP项目逻辑实现
1. 创建实体 在领域层
到ABPProject.Domain层创建要用到的实体。
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; using System.Text; using System.Threading.Tasks; using Volo.Abp.Domain.Entities.Auditing; namespace ABPProject.Models { [Table("Categories")] public class Category : FullAuditedEntity<Guid> { /// <summary> /// 类别名称 /// </summary> [MaxLength(50), Required] public string CategoryName { get; set; } /// <summary> /// 父级 /// </summary> [Required] public Guid ParentID { get; set; } /// <summary> /// 排序 /// </summary> [Required] public int Sort { get; set; } ///// <summary> ///// 属性列表 ///// </summary> //public IList<AttributeInfo> AttributeInfoList { get; set; } ///// <summary> ///// 属性组列表 ///// </summary> //public IList<AttributeGroup> AttributeGroupList { get; set; } } }
以上可以发现继承了FullAuditedEntity<Guid>
之所以这样是因为可以用到abp框架里的自带的比如ID , IsDeleted,DeleterId,DeletionTime 等等这些字段
2. 在ABPProject.EntityFrameworkCore项目中
ABPProjectDbContext文件中 增加
public DbSet<Category> Categories { get; set; }
执行更新数据库的命令。
在程序包管理控制台中执行
Add-Migration second1
update-database second1
生成数据
3. Dto
在ABPProject.Application.Contracts项目中,添加Dto,Dto是数据传输对象。
这个应该很多人不陌生,就是用来接收前端传过来的数据或者把后端产生的数据转为前端能看的数据。可以通过Automap与后端数据进行数据转换。这里举例接收创建一个Category数据的Dto
using System; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.Text; namespace ABPProject.Dto { public class CategoryDto { /// <summary> /// 类别名称 /// </summary> [MaxLength(50, ErrorMessage = "名称最长50"), Required(ErrorMessage = "名称必填")] public string CategoryName { get; set; } /// <summary> /// 父级 /// </summary> [Required(ErrorMessage = "上级必填")] public Guid ParentID { get; set; } /// <summary> /// 排序 /// </summary> [Required(ErrorMessage = "排序必填")] public int Sort { get; set; } } }
通过这个Dto,可以实现数据接收,也能自动实现数据校验
4、在ABPProject.Application层下的ABPProjectApplicationAutoMapperProfile文件里增加映射
CreateMap<CategoryDto, Category>(MemberList.Source);
5、在ABPProject.Application层下创建服务,增加CategoryAppService 服务类
增加 [Authorize] 标签,只有带token才能访问
using ABPProject.Dto; using ABPProject.Models; using Octokit.Internal; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Volo.Abp.Application.Services; using Volo.Abp.Domain.Repositories; namespace ABPProject.Service {
[Authorize] public class CategoryAppService:ApplicationService { private readonly IRepository<Category, Guid> _categoryRepository; public CategoryAppService(IRepository<Category, Guid> repository) { _categoryRepository = repository; } /// <summary> /// 创建类别 /// </summary> /// <param name="input"></param> /// <returns></returns> public async Task<string> CreateAsync(CategoryDto input) { var category = ObjectMapper.Map<CategoryDto, Category>(input); var categoryAdd = await _categoryRepository.InsertAsync(category); return "操作成功!"; } } }
6. 打开swagger 可查看接口:https://localhost:44385/swagger/index.html
引用:https://www.cnblogs.com/wcoolly/p/13307932.html
项目地址:https://gitee.com/wuxincaicai/abp
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异