应用层: AoRuiDe.GasMonitoring.Application
一、创建简单应用层服务:
1、应用层 根目录新增 AbpUserAppService.cs
[AllowAnonymous] //默认不做权限控制
public class AbpUserAppService: ApplicationService
{
public string Test(string value)
{
return value;
}
}
二、基于CrudAppService 创建默认 增、删、改、查、分页服务:
1、应用层 根目录新增 UserDto.cs:用于存放对外传递的数据内容
public class UserDto : EntityDto<Guid>
{
public Guid? TenantId { get; private set; }
public string UserName { get; private set; }
}
2、更改 AbpUserAppService.cs:CrudAppService具体参数自己查看
[AllowAnonymous]
public class AbpUserAppService : CrudAppService<AppUser, UserDto, Guid, PagedResultRequestDto, UserDto, UserDto>
{
public AbpUserAppService(IRepository<AppUser, Guid> repository) : base(repository)
{
}
}
3、根目录修改 GasMonitoringApplicationAutoMapperProfile.cs :用于定义 CrudAppService 中查询到的AppUser实体 向 UserDto映射转换
public class GasMonitoringApplicationAutoMapperProfile: Profile
{
public GasMonitoringApplicationAutoMapperProfile()
{
CreateMap<AppUser, UserDto>();
//CreateMap<UserDto, AppUser>(); //注意这种写法会因为 Dto中的数据 和 AppUser中的数据不匹配 报错
//CreateMap<TestDto, Test>().ForMember(x => x.CreationTime, opt => opt.Ignore()); //转换的时候 指定忽略后者中的CreationTime 因为Dto中不存在 很蛋疼的写法 字段多了没法玩儿
CreateMap<UserDto, AppUser>(MemberList.Destination); //转换时默认检测后者目标属性 Validate
CreateMap<UserDto, AppUser>(MemberList.Source); //正规姿势1:只检测Dto中属性 Validate
CreateMap<UserDto, AppUser>(MemberList.None); //正确姿势2:如果两个实体不完全相等且彼此属性互不包含,自动转换,不做任何检测
//类似于实体间的双向转换 不同于以往ABP的写法
//[AutoMapFrom(typeof(Tenant_UserMsgs))]
//[AutoMapTo(typeof(Tenant_UserMsgs))]
// public class ModeDto : EntityDto {}
}
}
4、在模块中注册GasMonitoringAppAutoMapperProfile:不添加映射转换配置 以及注册 会导致继承的增、删、改、查、分页接口调用报500错误
public class GasMonitoringApplicationModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
Configure<AbpAutoMapperOptions>(options =>
{
options.AddMaps<GasMonitoringApplicationModule>();
options.AddProfile<GasMonitoringApplicationAutoMapperProfile>(validate: true);
});
}
}
三、总结:
本文只做核心功能说明和展示,所有文件都是放在根目录的;
最近接了个私活,以前熟悉的是ABP框架,借这个机会尝试一下 AbpVnext ,每次换框架都会踩坑无数,摸着石头过河让人难受!