如何从源属性映射到目标?

时间:2012-12-02 00:43:17

标签: automapper-2

我发誓我以前做过,但我现在似乎无法让它工作。基本上我得到的EndUser包含Site,我想将Site映射到SiteInfo对象。

这是我的地图配置:

Mapper.CreateMap<Site, SiteInfo>()
    .ForMember(dest => dest.SiteID, opt => opt.MapFrom( src => src.ID))
    .ForMember(dest => dest.CompanyID, opt => opt.MapFrom(src => src.Company.ID));

Mapper.CreateMap<EndUser, SiteInfo>()                
    .ForMember( dest => dest, opt => opt.MapFrom(src => src.Site ));

因此EndUser.Site应该能够映射到SiteInfo。我只需拨打Mapper.Map<SiteInfo>(EndUser.Site)即可在外面执行此操作。我认为从最终用户直接映射到位置信息只是更简洁的语法。

那么我如何直接从EndUser映射到SiteInfo?基本上这是我想写的代码:

var user = mcp.Users.GetEndUser(userAddress.Address);
var siteInfo = Mapper.Map<SiteInfo>(user);

目前,我正在解决此问题,只需从EndUser.Site映射,如下所示:

var user = GetEndUser(emailAddress);
            var siteInfo = user == null 
                            ? null as SiteInfo 
                            : Mapper.Map<SiteInfo>(user.Site);

1 个答案:

答案 0 :(得分:0)

您要将Location映射到SiteInfo还是LocationInfo?您在dest - &gt;中映射到的EndUser属性是什么? SiteInfo映射? SiteInfo是否包含LocationEndUser属性的组合?

如果没有这些信息,我只是猜测,但你想尝试这样做吗?

var rc = Mapper.Map<SiteInfo>(endUser);
rc = Mapper.Map(endUser.Location, rc);

<强>更新

所以,如果我理解正确,你就是在这样的映射之后?

Mapper.CreateMap<EndUser, SiteInfo>()
    .ForMember(dest => dest.SiteID, opt => opt.MapFrom( src => src.Site.ID))
    .ForMember(dest => dest.CompanyID, opt => opt.MapFrom(src => src.Site.Company.ID));