Automapper将实体展平为dto

时间:2014-01-17 16:50:12

标签: asp.net-mvc automapper

目前我在使用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()。

2 个答案:

答案 0 :(得分:0)

我认为你不需要打电话

Mapper.CreateMap(Of List(Of ILead), List(Of ILeadSearchDTO))()

Automapper将自动处理列表。但无论如何,试着打电话

Mapper.AssertConfigurationIsValid();

在最后CreateMap之后。

答案 1 :(得分:0)

我最终设法解决了这个问题。

我必须使用以下代码。

ConstructUsing(Function(x As ResolutionContext) New LeadSearchDTO())