用户微服务模块编写

Administrator 6 2023-09-24

1.在用户微服务模块中WeifuwuDemo.User.Domain新建文件夹users,并新建一个userinfo实体;

public class UserInfo:FullAuditedAggregateRoot<Guid>
    {
        public string UserName { get; set; }
        public string Password { get; set; }
        public string UserNickName { get;set; }
        public string UserQQ { get;set; }
        public string UserPhone { get;set; }
    }

2.在项目WeifuwuDemo.User.EntityFrameworkCore的DbContext中添加dbset

[ConnectionStringName(UserDbProperties.ConnectionStringName)]
public class UserDbContext : AbpDbContext<UserDbContext>, IUserDbContext
{
    /* Add DbSet for each Aggregate Root here. Example:
     * public DbSet<Question> Questions { get; set; }
     */

    public DbSet<UserInfo> UserInfos { get; set; }
    public UserDbContext(DbContextOptions<UserDbContext> options)
        : base(options)
    {

    }

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        builder.ConfigureUser();
    }
}

在项目的DbContextModelCreatingExtensions文件中添加表注册:

public static class UserDbContextModelCreatingExtensions
{
    public static void ConfigureUser(
        this ModelBuilder builder)
    {
        Check.NotNull(builder, nameof(builder));


        builder.Entity<UserInfo>(b =>
        {
            b.ConfigureByConvention();
        });

        /* Configure all entities here. Example:

        builder.Entity<Question>(b =>
        {
            //Configure table & schema name
            b.ToTable(UserDbProperties.DbTablePrefix + "Questions", UserDbProperties.DbSchema);

            b.ConfigureByConvention();

            //Properties
            b.Property(q => q.Title).IsRequired().HasMaxLength(QuestionConsts.MaxTitleLength);

            //Relations
            b.HasMany(question => question.Tags).WithOne().HasForeignKey(qt => qt.QuestionId);

            //Indexes
            b.HasIndex(q => q.CreationTime);
        });
        */
    }
}

3.在项目 WeifuwuDemo.User.HttpApi.Host中生成迁移表:

在项目文件夹地址栏执行cmd命令,用dotnet ef命令进行迁移表:

dotnet ef migrations add userinfo

生成数据库表:dotnet ef database update

在WeifuwuDemo.User.Domain中Users文件夹创建仓储层Repository:用于后面我们自己的自定义方法

public interface IUserinfoAbpRepository:IRepository<UserInfo,Guid>
    {
        //UserInfo GetUserInfoByName(string userName);
        //public IEnumerable<UserInfo> GetUserinfoAndImgs();
    }

在WeifuwuDemo.User.EntityFrameworkCore中新建文件夹users并创建方法实现仓储层:

namespace WeifuwuDemo.User.Users
{
    public class UserinfoAbpRepository:EfCoreRepository<UserDbContext,UserInfo,Guid>,IUserinfoAbpRepository
    {
        public UserinfoAbpRepository(IDbContextProvider<UserDbContext> dbContextProvider):base(dbContextProvider)
        {
            
        }
    }
}

在WeifuwuDemo.User.Application.Contracts中新建users文件夹并创建service接口,dto等

namespace WeifuwuDemo.User.Userinfos
{
    public interface IUserinfoAppServices:ICrudAppService<UserinfoDto,Guid,PagedAndSortedResultRequestDto,CreateUserinfoDto,UpdateUserinfoDto>
    {

    }
}
namespace WeifuwuDemo.User.Userinfos
{
    public class CreateUserinfoDto
    {
        public string UserName { get; set; }
        public string Password { get; set; }
    }
}
namespace WeifuwuDemo.User.Userinfos
{
    public class DeleteUserinfoDto
    {
        public string UserName { get; set; }
    }
}
namespace WeifuwuDemo.User.Userinfos
{
    public class UpdateUserinfoDto
    {
        public string UserName { get; set; }
        public string Password { get; set; }
        public string UserNickName { get; set; }
        public string UserQQ { get; set; }
        public string UserPhone { get; set; }
    }
}
namespace WeifuwuDemo.User.Userinfos
{
    public class UserinfoDto:EntityDto<Guid>
    {
        public string UserName { get; set; }
        public string Password { get; set; }
        public string UserNickName { get; set; }
        public string UserQQ { get; set; }
        public string UserPhone { get; set; }
    }
}

在WeifuwuDemo.User.Application中实现service接口

namespace WeifuwuDemo.User.Userinfos
{
    [RemoteService(IsEnabled =false)]
    public class UserinfoAppServices:CrudAppService<UserInfo,UserinfoDto,Guid,PagedAndSortedResultRequestDto,CreateUserinfoDto,UpdateUserinfoDto>, IUserinfoAppServices
    {
        private readonly IUserinfoAbpRepository _repository;

        public UserinfoAppServices(IUserinfoAbpRepository repository):base(repository)
        {
            _repository = repository;
        }
    }
}

在WeifuwuDemo.User.HttpApi中创建controller:

namespace WeifuwuDemo.User.Userinfo
{
    [ApiController]
    [Route("api/[controller]/[action]")]
    public class UserinfoController:IUserinfoAppServices
    {
        private readonly IUserinfoAppServices _userinfoAppServices;

        public UserinfoController(IUserinfoAppServices userinfoAppServices)
        {
            _userinfoAppServices = userinfoAppServices;
        }
        [HttpPost]
        public Task<UserinfoDto> CreateAsync(CreateUserinfoDto input)
        {
            return _userinfoAppServices.CreateAsync(input);
        }
        [HttpDelete]
        public Task DeleteAsync(Guid id)
        {
            return _userinfoAppServices.DeleteAsync(id);
        }
        [HttpGet]
        public Task<UserinfoDto> GetAsync(Guid id)
        {
            return _userinfoAppServices.GetAsync(id);
        }
        [HttpGet]
        public Task<PagedResultDto<UserinfoDto>> GetListAsync(PagedAndSortedResultRequestDto input)
        {
            return _userinfoAppServices.GetListAsync(input);
        }
        [HttpPut]
        public Task<UserinfoDto> UpdateAsync(Guid id, UpdateUserinfoDto input)
        {
            return _userinfoAppServices.UpdateAsync(id, input);
        }
    }
}

在WeifuwuDemo.User.Application项目中添加dto映射关系:

namespace WeifuwuDemo.User;

public class UserApplicationAutoMapperProfile : Profile
{
    public UserApplicationAutoMapperProfile()
    {
        CreateMap<UserInfo, UserinfoDto>();
        CreateMap<PagedAndSortedResultRequestDto, UserInfo>();
        CreateMap<CreateUserinfoDto, UserInfo>();
        CreateMap<UpdateUserinfoDto, UserInfo>();
    }
}

将WeifuwuDemo.User.Application中UserApplicationModule的验证改为false

public class UserApplicationModule : AbpModule
{
    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        context.Services.AddAutoMapperObjectMapper<UserApplicationModule>();
        Configure<AbpAutoMapperOptions>(options =>
        {
            options.AddMaps<UserApplicationModule>(validate: false);
        });
    }
}