目前我在使用automapper时遇到了一些麻烦。
我有一个具有以下属性的潜在客户
Id as long
FirstName as string
LastName as string
Title as string
LeadOpportunities as ICollection(Of ILeadOpportunity)
LeadOpportunity包含以下属性
SourceDate as datetime
LeadOpportunityType as LeadOpportunityType
LeadOpportunityType包含以下属性
Description as string
我有一个LeadSearchDTO,它具有以下属性
LeadId as long
LastActionDate as datetime
Title as string
FirstName as string
LastName as string
Type as string
我的bootstrapper类中有以下内容。
Mapper.CreateMap(Of List(Of ILead), List(Of ILeadSearchDTO))()
Mapper.CreateMap(Of ILead, ILeadSearchDTO)().ForMember(Function(en) en.LeadId, Sub(map) map.MapFrom(Function(dto) dto.Id)) _
.ForMember(Function(en) en.LastActionDate, Sub(map) map.MapFrom(Function(dto) dto.LeadOpportunities.FirstOrDefault().SourceDate)) _
.ForMember(Function(en) en.Type, Sub(map) map.MapFrom(Function(dto) dto.LeadOpportunities.FirstOrDefault().LeadOpportunityType.Description))
然后我使用以下代码映射这两个对象。
response.LeadDTOs = Me._mapper.Map(Of List(Of ILead), List(Of ILeadSearchDTO))(leads)
当我把断点放在响应时.LeadDTOs它不会从lead集合中映射。
有没有人知道我可能会缺少什么?我刚开始使用自动播放器只用了一个多星期,到目前为止我一直在使用简单的转换。
编辑:
如果我遗漏Mapper.CreateMap(List(Of ILead),List(Of ILeadSearchDTO))(),它会给我以下错误信息。
Mapping types:
ILead -> ILeadSearchDTO
_8T.DataHub.Model.Interfaces.Entities.Lead.ILead -> _8T.DataHub.Service.Interfaces.DTOs.Lead.ILeadSearchDTO
Destination path:
List`1[0]
Source value:
_8T.DataHub.Model.Implementation.Entities.Lead.Lead
我已经包含了Mapper.AssertConfigurationIsValid()。
答案 0 :(得分:0)
我认为你不需要打电话
Mapper.CreateMap(Of List(Of ILead), List(Of ILeadSearchDTO))()
Automapper将自动处理列表。但无论如何,试着打电话
Mapper.AssertConfigurationIsValid();
在最后CreateMap
之后。
答案 1 :(得分:0)
我最终设法解决了这个问题。
我必须使用以下代码。
ConstructUsing(Function(x As ResolutionContext) New LeadSearchDTO())