根据上章:【abp Vnext】下载并运行abp Vnext项目详细教程文档
该实例项目已上传到Gitee:https://gitee.com/henrryhu/acme.-book-store
接下来,演示
建实体、
建DTO、
设置DTO与实体互转映射、
为实体添加DbSet属性、
申明对外开放的接口、
实现接口的封装、
新建实体后需要生成数据库迁移
这是目前的解决方案:
1.建实体
在Acme.BookStore.Domain
解决方案里,新建文件夹Com,在文件夹里新建实体类MuenList
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.MultiTenancy;namespace Acme.BookStore.Com
{/// <summary>/// 菜单/// </summary>[Table("MuenList")][Description("菜单表")]public class MuenList:ComBase<Guid>,IMultiTenant{[Key]public Guid Id { get; set; }/// <summary>/// 菜单名称/// </summary>[StringLength(50)][Description("菜单名称")]public string Title { get; set; }/// <summary>/// 菜单名称/// </summary>[Description("菜单代码")]public string Key { get; set; }/// <summary>/// 菜单名称/// </summary>[Description("菜单图标")]public string IconType { get; set; }/// <summary>/// 菜单名称/// </summary>[Description("菜单路径")]public string Path { get; set; }/ <summary>/ 菜单名称/ </summary>//public List<MuenList> Children { get; set; }/// <summary>/// 租户ID/// </summary>[Description("租户ID")]public Guid? TenantId { get; set; }}
}
2.建DTO
在Acme.BookStore.Application.Contracts
解决方案下,新建COM文件夹,新建MuenListDto
类
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel;
using System.Text;
using System.ComponentModel.DataAnnotations.Schema;namespace Acme.BookStore.COM
{/// <summary>/// 菜单/// </summary>public class MuenListDto: ComBaseDto{/// <summary>/// 菜单名称/// </summary>[Column("菜单名称")]public string Title { get; set; }/// <summary>/// 菜单名称/// </summary>[Column("菜单代码")]public string Key { get; set; }/// <summary>/// 菜单名称/// </summary>[Column("菜单图标")]public string IconType { get; set; }/// <summary>/// 菜单名称/// </summary>[Column("菜单路径")]public string Path { get; set; }/// <summary>/// 租户ID/// </summary>public Guid? TenantId { get; set; }}
}
3.设置DTO与实体互转映射
在Acme.BookStore.Application
解决方案里,进入BookStoreApplicationAutoMapperProfile
类文件
加入如下代码,实现实体与DTO互转映射
CreateMap<MuenList, MuenListDto>().ReverseMap();
4.为实体添加DbSet属性
在Acme.BookStore.EntityFrameworkCore
解决方案里BookStoreDbContext
类文件里
新增DbSet属性代码
public DbSet<MuenList> MuenList { get; set; }
5.申明对外开放的接口
在Acme.BookStore.Application.Contracts
解决方案里,COM文件夹下,新增IMenuListAppService
类文件
public interface IMenuListAppService: IApplicationService{/// <summary>/// 新增接口/// </summary>/// <param name="input"></param>/// <returns></returns>Task<OutputBaseDto<MuenListDto>> CreateAsync(MuenListDto input);}
6.实现接口的封装
在Acme.BookStore.Application
解决方案里,新建COM文件夹,新建MenuListAppService
文件类
实现封装代码,这里可以自定义任何业务接口CRUD
using Acme.BookStore.COM;
using AutoMapper.Internal.Mappers;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
using Volo.Abp.Users;namespace Acme.BookStore.Com
{public class MenuListAppService : ApplicationService, IMenuListAppService{public readonly IRepository<MuenList, Guid> _MenuListRepository;public MenuListAppService(IRepository<MuenList, Guid> menuListRepository){_MenuListRepository = menuListRepository;}/// <summary>/// 插入返回/// </summary>/// <param name="input"></param>/// <returns></returns>public async Task<OutputBaseDto<MuenListDto>> CreateAsync(MuenListDto input){var entity = ObjectMapper.Map<MuenListDto, MuenList>(input);Console.WriteLine(entity);await _MenuListRepository.InsertAsync(entity, autoSave: true);OutputBaseDto<MuenListDto> output = new OutputBaseDto<MuenListDto>();output.Data = ObjectMapper.Map<MuenList, MuenListDto>(entity);return output;}}
}
7.新建实体后需要生成数据库迁移
点击工具==》NuGet包管理器==》程序包管理器控制台==》选择默认项目为Acme.BookStore.EntityFrameworkCore
然后在终端输入如下实现生成数据库迁移文件
//add-migration "迁移说明"
add-migration init
然后执行到数据库里
update-database
8.注意点
1.只有新建了实体才需要执行生成迁移数据库文件
2.业务接口的封装主要实现在Acme.BookStore.Application
解决方案里
3.在Acme.BookStore.Application
解决方案里实现了多少public
公开的接口,就需要在Acme.BookStore.Application.Contracts
解决方案里申明有哪些接口
4.ABP官方文档:https://docs.abp.io/zh-Hans/abp/latest/Object-To-Object-Mapping
5.我这里启动了Acme.BookStore.HttpApi.Host
和Acme.BookStore.AuthServer
两个解决方案,HttpApi.Host
是swagger,AuthServer
是权限管理