ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

ABP vNext V5 + VS2022+ .Net 6.0 学习笔记(4)--AutoMapper, FullAuditedEntity

2021-11-19 17:32:41  阅读:259  来源: 互联网

标签:vNext MetaBase Dto -- FullAuditedEntity List Platform AnnouncementDto public


在第1篇用的ToDoItem 继承的是BasicAggregateRoot, 但实际上企业应用,可能大部分实体,需要软删除,记录创建/修改/删除的人和时间. 来满足审计的要求

 这就要用到FullAuditedEntity, 

 

 

Dto和Entity要映射,如果没有映射会出现以下错误

2021-11-18 13:32:08.145 +08:00 [INF] Route matched with {action = "GetList", controller = "Announcement", area = "", page = ""}. Executing controller action with signature System.Threading.Tasks.Task`1[System.Collections.Generic.List`1[MetaBase.Platform.AnnouncementDto]] GetListAsync() on controller MetaBase.Platform.AnnouncementAppService (MetaBase.Platform.Application).
2021-11-18 13:32:08.152 +08:00 [ERR] ---------- RemoteServiceErrorInfo ----------
{
  "code": null,
  "message": "An internal error occurred during your request!",
  "details": null,
  "data": {},
  "validationErrors": null
}

2021-11-18 13:32:08.152 +08:00 [ERR] Error mapping types.

Mapping types:
Object -> List`1
System.Object -> System.Collections.Generic.List`1[[MetaBase.Platform.AnnouncementDto, MetaBase.Platform.Application.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]
AutoMapper.AutoMapperMappingException: Error mapping types.

Mapping types:
Object -> List`1
System.Object -> System.Collections.Generic.List`1[[MetaBase.Platform.AnnouncementDto, MetaBase.Platform.Application.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]
 ---> AutoMapper.AutoMapperMappingException: Missing type map configuration or unsupported mapping.

Mapping types:
Announcement -> AnnouncementDto
MetaBase.Platform.Announcement -> MetaBase.Platform.AnnouncementDto
   at lambda_method3301(Closure , Announcement , AnnouncementDto , ResolutionContext )
   at lambda_method3300(Closure , Object , List`1 , ResolutionContext )
   --- End of inner exception stack trace ---
   at lambda_method3300(Closure , Object , List`1 , ResolutionContext )
   at Volo.Abp.ObjectMapping.DefaultObjectMapper.Map[TSource,TDestination](TSource source) in D:\ci\Jenkins\workspace\abp-framework-release\abp\framework\src\Volo.Abp.ObjectMapping\Volo\Abp\ObjectMapping\DefaultObjectMapper.cs:line 72
   at MetaBase.Platform.AnnouncementAppService.GetListAsync() i

 在Application项目的XXXApplicationAutoMapperProfile里添加Map, 重新生成HttpApi.Host 项目

CreateMap<AnnouncementDto, Announcement>().IgnoreAuditedObjectProperties();  //IgnoreAuditedObjectProperties 好像不加也可以
CreateMap<Announcement, AnnouncementDto>(); //加这句能从实体=>Dto
实体<=>Dto 这样要写2句也太麻烦了. 改成这样
 CreateMap<Announcement, AnnouncementDto>().ReverseMap(); //双向映射

假如Dto和Entity的字段名,不一样, 假如我把Dto改成这样

 public class AnnouncementDto
 {
        public Guid Id { get; set; }  //Entity里默认用Id做主键,Dto则要显式指定guid
        public String Subject { get; set; }  //标题Subject对应Entity.Title
        public String Content { get; set; } //公告内容对应Entity.ContentDesc
        public String ColumnCode { get; set; } //栏目编码
}

 

对应的Mapping就要这样写

            CreateMap<Announcement, AnnouncementDto>()
                .ForMember(x=>x.Subject,options=>options.MapFrom(input=>input.Title))
                .ForMember(x => x.Content, options => options.MapFrom(input => input.ContentDesc))
                .ReverseMap();

在Application项目的实现方法里就可以用ObjectMapper.Map的方法来转换

  public async Task<AnnouncementDto> GetAsync(Guid id)
        {
            var entity =await _Repo.GetAsync(id);
            return ObjectMapper.Map<Announcement, AnnouncementDto>(entity);
   
        }


        public async Task<List<AnnouncementDto>> GetListAsync()
        {
            var items = await _Repo.GetListAsync();
            //entity list=> Dto list
            return ObjectMapper.Map<List<Announcement>, List<AnnouncementDto>>(items);

        }

 WebAPI 方法命名的约定, Create/Get/Update/Delete ==> Post/Get/Put/Delete

我尝试加几个接口方法,  GetAllListAysnc=> /List  去掉了All  , GetAnyList2Async =-> any-list2

 

 

 

 



标签:vNext,MetaBase,Dto,--,FullAuditedEntity,List,Platform,AnnouncementDto,public
来源: https://www.cnblogs.com/zitjubiz/p/abp_net6_vs2022_4.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有