2016-02-12 70 views
3

我得定義爲AutoMapper一個源對象到多個目標對象

public class SourceRoot 
{ 
    ... 
    public Organisation Organisation { get; set; } 
    ... 
} 

public class Organisation 
{ 
    public long? Id { get; set; } 
    public string Name { get; set; }  
    public string Currency { get; set; } 
    public double SupplementaryAmount { get; set; } 
    public decimal BaseConversionRate { get; set; } 
} 

和目的地的源模型定義爲:

public class DestinationRoot 
{ 
    ... 
    public Organisation Organisation { get; set; } 
    public ContributesTo ContributesTo { get; set; } 
} 

public class Organisation 
{ 
    public long? Id { get; set; } 
    public string Name { get; set; }   
} 

public class ContributesTo 
{ 
    public string Currency { get; set; } 
    public double SupplementaryAmount { get; set; } 
    public decimal BaseConversionRate { get; set; } 
} 

我想從SourceRoot映射到DestinationRoot將源Organisation的副本添加到目標OrganisationContributesTo

我有AutoMapper以下配置:

public static class AutoMapperConfig 
{ 
    public static MapperConfiguration RegisterMappings() 
    { 
     var config = new MapperConfiguration(cfg => 
      { 
       cfg.AddProfile<MyProfile>(); 
      }); 

     return config; 
    } 
} 

public class MyProfile : Profile 
{ 
    protected override void Configure() 
    { 
     this.CreateMap<SourceRoot, DestinationRoot>();   
     this.CreateMap<Source.Organisation, Destination.Organisation>(); 
     this.CreateMap<Source.Organisation, Destination.ContributesTo>(); 
    } 
} 

使用這個當前配置文件Organisation被映射但ContributesTo出來爲空。 請注意,我使用AutoMapper的4.2版本,其中靜態方法已被棄用,因此試圖擺脫這一點。通常我會這樣做:

Mapper.CreateMap<SourceRoot, DestinationRoot>() 
      .ForMember(d => d.ContributesTo, opt => opt.MapFrom(s=> Mapper.Map<ContributesTo>(s.Organisation))); 

但是,這不建議(引用靜態方法)。有沒有其他的方法來做到這一點?

感謝

回答

1

只需添加映射ContributesTo目的地會員:

protected override void Configure() 
{ 
    CreateMap<Source.SourceRoot, Destination.DestinationRoot>() 
     .ForMember(d => d.ContributesTo, opt => opt.MapFrom(s => s.Organisation)); 

    CreateMap<Source.Organisation, Destination.Organisation>(); 
    CreateMap<Source.Organisation, Destination.ContributesTo>(); 
} 

否則Automapper發現,源和destinaton根擁有財產性Organisation,並將其映射僅此屬性。 Automapper無法理解它應該使用源的一個屬性來映射目標的多個屬性(它們與名稱不匹配)。請注意,您不需要指定Organisation成員的映射,因爲它匹配目標對象中的屬性名稱。

+1

當答案非常簡單時,這就是你努力尋找解決方案時的難點之一(就像我試圖爲它製作地圖一樣)!感謝那! – ADringer

相關問題