2017-04-20 162 views
1

我遵循Automapper Wiki中的嵌套示例,但我在擴展它時遇到了一些麻煩。在下面的代碼中,我試圖將InnerDest2映射到OuterSource。具體來說,我想InnerDest2.Value填充OuterSource.Value,但是當我運行時,InnerDest2返回爲空。我確信有一些簡單的我錯過了,但我無法弄清楚。Automapper - 將InnerDestination映射到OuterSource

任何想法?

namespace AutomapNestTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      ConfigureAutomapper(); 
      var source = new OuterSource 
      { 
       Value = 5, 
       Inner = new InnerSource { OtherValue = 15 }, 
      }; 
      var dest = new OuterDest(); 

      AutoMapper.Mapper.Map(source, dest); 
     } 

     private static void ConfigureAutomapper() 
     { 
      AutoMapper.Mapper.Initialize(cfg => 
      { 
       cfg.CreateMap<OuterSource, OuterDest>(); 
       cfg.CreateMap<InnerSource, InnerDest>(); 
       cfg.CreateMap<OuterSource, InnerDest2>(); 
      }); 
     } 
    } 

    public class OuterSource 
    { 
     public int Value { get; set; } 
     public InnerSource Inner { get; set; } 
    } 

    public class InnerSource 
    { 
     public int OtherValue { get; set; } 
    } 

    public class OuterDest 
    { 
     public int Value { get; set; } 
     public InnerDest Inner { get; set; } 
     public InnerDest2 Inner3 { get; set; } 
    } 

    public class InnerDest 
    { 
     public int OtherValue { get; set; } 
    } 
    public class InnerDest2 
    { 
     public int Value { get; set; } 
    } 
} 

回答

1

你映射的OuterSource對象的OuterDesc對象。有一個從OuterSourceInnerDest2的映射配置,但OuterSource本身沒有OuterSource類型的屬性,所以無法映射OuterDest中的屬性Inner3

如果您需要將source.Value映射到dest.Inner3.Value,則必須明確地執行另一個映射。首先聲明變量:

var innerDest2 = new InnerDest2(); 

在此之後,執行映射,並設置dest.Inner3

AutoMapper.Mapper.Map(source, innerDest2); 
dest.Inner3 = innerDest2; 
+0

這工作!謝謝。我想我認爲這是因爲OuterSource和InnerDest2都具有Value屬性,它只會「自動地」在第三個CreateMap中選擇它。 – Carlo