步骤思路
1、模型设计:模仿\观察
2、模型领域设计
3、模型表设计
4、模型业务逻辑设计
5、基本业务逻辑操作
1、用户模型设计
1、在领域层设计聚合根
/*----------------------------------------------------------------
* 创建者:WangBenChi
* 创建时间:2023/4/13 20:20:03
*----------------------------------------------------------------*/
using System;
using Volo.Abp.Domain.Entities.Auditing;
namespace WBC.User.Users
{
/// <summary>
/// 用户模型
/// </summary>
[Table("UsersModels")]
public class UsersModels : FullAuditedAggregateRoot<Guid>
{
/// <summary>
/// 用户名
/// </summary>
public string UserName { get; set; }
/// <summary>
/// 密码
/// </summary>
public string PassWord { get; set; }
/// <summary>
/// 昵称
/// </summary>
public string UserNickName { get; set; }
/// <summary>
/// QQ
/// </summary>
public string UserQQ { get; set; }
/// <summary>
/// 手机号
/// </summary>
public string UserPhone { get; set; }
}
}
2、在EF层修改扩展类,根据模型创建数据库及表
3、生成迁移文件
在User微服务下进入CMD命令输入dotnet ef 如果没有出现一下内容需要先安装ef cli
dotnet tool install --global dotnet-ef
运行迁移命令,生成对应文件
dotnet ef migrations add users
运行迁移文件添加到数据库
dotnet ef database update
2、仓储层
/*----------------------------------------------------------------
* 创建者:WangBenChi
* 创建时间:2023/4/13 20:53:41
*----------------------------------------------------------------*/
using System;
using Volo.Abp.Domain.Repositories;
namespace WBC.User.Users
{
internal interface IUserAbpRepository : IRepository<UsersModels, Guid>
{
}
}
/*----------------------------------------------------------------
* 创建者:WangBenChi
* 创建时间:2023/4/13 20:56:29
*----------------------------------------------------------------*/
using System;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.DependencyInjection;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using WBC.User.EntityFrameworkCore;
namespace WBC.User.Users
{
/// <summary>
/// 用户仓储实现
/// </summary>
[Dependency(ServiceLifetime.Transient)]
public class UserAbpRepository : EfCoreRepository<UserDbContext, UsersModels, Guid>, IUserAbpRepository
{
public UserAbpRepository(IDbContextProvider<UserDbContext> dbContextProvider) : base(dbContextProvider)
{
}
}
}
3、服务
CRUD Dto创建
/*----------------------------------------------------------------
* 创建者:WangBenChi
* 创建时间:2023/4/13 21:06:10
*----------------------------------------------------------------*/
namespace WBC.User.Users
{
/// <summary>
/// 创建Dto
/// </summary>
public class CreateUserDto
{
/// <summary>
/// 用户名
/// </summary>
public string UserName { set; get; }
/// <summary>
/// 密码
/// </summary>
public string Password { set; get; }
/// <summary>
/// 用户昵称
/// </summary>
public string UserNickname { set; get; }
/// <summary>
/// 用户QQ
/// </summary>
public string UserQQ { set; get; }
/// <summary>
/// 用户手机号
/// </summary>
public string UserPhone { set; get; }
}
}
/*----------------------------------------------------------------
* 创建者:WangBenChi
* 创建时间:2023/4/13 21:06:28
*----------------------------------------------------------------*/
namespace WBC.User.Users
{
/// <summary>
/// 删除Dto
/// </summary>
public class DeleteUserDto
{
/// <summary>
/// 用户名
/// </summary>
public string UserName { set; get; }
}
}
/*----------------------------------------------------------------
* 创建者:WangBenChi
* 创建时间:2023/4/13 21:07:29
*----------------------------------------------------------------*/
using System;
namespace WBC.User.Users
{
/// <summary>
/// 更新Dto
/// </summary>
public class UpdateUserDto
{
/// <summary>
/// 用户名
/// </summary>
public string UserName { set; get; }
/// <summary>
/// 密码
/// </summary>
public string Password { set; get; }
/// <summary>
/// 用户昵称
/// </summary>
public string UserNickname { set; get; }
/// <summary>
/// 用户QQ
/// </summary>
public string UserQQ { set; get; }
/// <summary>
/// 创建时间
/// </summary>
public DateTime CreateTime { set; get; }
/// <summary>
/// 用户手机号
/// </summary>
public string UserPhone { set; get; }
}
}
/*----------------------------------------------------------------
* 创建者:WangBenChi
* 创建时间:2023/4/13 21:08:24
*----------------------------------------------------------------*/
using System;
using Volo.Abp.Application.Dtos;
namespace WBC.User.Users
{
/// <summary>
/// 查询dto
/// </summary>
public class UserDto : EntityDto<Guid>
{
/// <summary>
/// 用户名
/// </summary>
public string UserName { set; get; }
/// <summary>
/// 密码
/// </summary>
public string Password { set; get; }
/// <summary>
/// 用户昵称
/// </summary>
public string UserNickname { set; get; }
/// <summary>
/// 用户QQ
/// </summary>
public string UserQQ { set; get; }
/// <summary>
/// 用户手机号
/// </summary>
public string UserPhone { set; get; }
}
}
服务创建
/*----------------------------------------------------------------
* 创建者:WangBenChi
* 创建时间:2023/4/13 21:09:42
*----------------------------------------------------------------*/
using System;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
namespace WBC.User.Users
{
public interface IUserAppService : ICrudAppService<
UserDto, Guid, CreateUserDto, UpdateUserDto, PagedAndSortedResultRequestDto>
{
}
}
最终结果
4、服务的实现
/*----------------------------------------------------------------
* 创建者:WangBenChi
* 创建时间:2023/4/13 21:14:37
*----------------------------------------------------------------*/
using System;
using Volo.Abp;
using Volo.Abp.Application.Dtos;
using Volo.Abp.Application.Services;
using WBC.User.Application.Contracts;
namespace WBC.User.Users
{
/// <summary>
/// 用户服务实现
/// </summary>
[RemoteService(IsEnabled = false)]
public class UserAppService : CrudAppService<
UsersModels,
UserDto,
Guid,
PagedAndSortedResultRequestDto,
CreateUserDto,
UpdateUserDto>, IUserAppService
{
public IUserAbpRepository _UserAbpRepository;
public UserAppService(IUserAbpRepository repository)
: base(repository)
{
this._UserAbpRepository = repository;
}
}
}
5、autoMapper进行实体映射
using AutoMapper;
using Volo.Abp.Application.Dtos;
using WBC.User.Application.Contracts;
using WBC.User.Users;
namespace WBC.User
{
public class UserApplicationAutoMapperProfile : Profile
{
public UserApplicationAutoMapperProfile()
{
/* You can configure your AutoMapper mapping configuration here.
* Alternatively, you can split your mapping configurations
* into multiple profile classes for a better organization. */
CreateMap<UsersModels, UserDto>();
CreateMap<PagedAndSortedResultRequestDto, UsersModels>();
CreateMap<CreateUserDto, UsersModels>();
CreateMap<UpdateUserDto, UsersModels>();
}
}
}
验证改为false
6、创建控制器
/*----------------------------------------------------------------
* 创建者:WangBenChi
* 创建时间:2023/4/13 21:31:11
*----------------------------------------------------------------*/
using System;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Volo.Abp.Application.Dtos;
using WBC.User.Application.Contracts;
namespace WBC.User.Users
{
/// <summary>
/// 用户服务控制器
/// </summary>
[Route("api/UserService/User")]
[ApiController]
public class UsersController : UserController, IUserAppService
{
private readonly IUserAppService UserService;
public UsersController(IUserAppService UserService)
{
this.UserService = UserService;
}
/// <summary>
/// 查询
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpGet]
public async Task<PagedResultDto<UserDto>> GetListAsync([FromQuery] PagedAndSortedResultRequestDto input)
{
return await UserService.GetListAsync(input);
}
/// <summary>
/// 查询单个
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("{id}")]
public async Task<UserDto> GetAsync(Guid id)
{
var User = await UserService.GetAsync(id);
return User;
}
/// <summary>
/// 更新
/// </summary>
/// <param name="id"></param>
/// <param name="input"></param>
/// <returns></returns>
[HttpPut("{id}")]
public async Task<UserDto> UpdateAsync(Guid id, UpdateUserDto input)
{
return await UserService.UpdateAsync(id, input);
}
/// <summary>
/// 创建
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost]
public async Task<UserDto> CreateAsync(CreateUserDto input)
{
return await UserService.CreateAsync(input);
}
/// <summary>
/// 删除
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpDelete("{id}")]
public async Task DeleteAsync(Guid id)
{
await UserService.DeleteAsync(id);
}
}
}
7、验证逻辑是否可以使用
启动User微服务
调用接口