title: Automapper - ReverseMap() does not perform mapping
body: <p>I have the following 2 classes:</p>
  
  <pre><code>public class ReferenceEngine
  {
      public Guid ReferenceEngineId { get; set; }
      public string Description { get; set; }
      public int Horsepower { get; set; }
  }
  
  public class Engine
  {
      public Guid Id { get; set; }
      public string Description { get; set; }
      public int Power { get; set; }
  }
  </code></pre>
  
  <p>I am using automapper to perform a mapping from ReferenceEngine to Engine and vice versa. Notice that the properties <code>ReferenceEngineId</code>/<code>Id</code> and <code>Horsepower</code>/<code>Power</code> does not have the same name. </p>
  
  <p>The following mapping configuration works and the properties having different names are successfully mapped:</p>
  
  <pre><code>public static void ConfigureMapperWorking()
  {
      AutoMapper.Mapper.CreateMap&lt;ReferenceEngine, Engine&gt;()
          .ForMember(dest =&gt; dest.Description, opt =&gt; opt.MapFrom(src =&gt; src.Description)).ReverseMap();
  
      AutoMapper.Mapper.CreateMap&lt;ReferenceEngine, Engine&gt;()
          .ForMember(dest =&gt; dest.Id, opt =&gt; opt.MapFrom(src =&gt; Guid.Parse(src.ReferenceEngineId.ToString())))
          .ForMember(dest =&gt; dest.Power, opt =&gt; opt.MapFrom(src =&gt; src.Horsepower));
  
      AutoMapper.Mapper.CreateMap&lt;Engine, ReferenceEngine&gt;()
          .ForMember(dest =&gt; dest.ReferenceEngineId, opt =&gt; opt.MapFrom(src =&gt; Guid.Parse(src.Id.ToString())))
          .ForMember(dest =&gt; dest.Horsepower, opt =&gt; opt.MapFrom(src =&gt; src.Power));
  }
  </code></pre>
  
  <p>However the following does not work although I invoke the method <code>ReverseMap()</code> at the end:</p>
  
  <pre><code>public static void ConfigureMapperNotWorking()
  {
      AutoMapper.Mapper.CreateMap&lt;ReferenceEngine, Engine&gt;()
          .ForMember(dest =&gt; dest.Id, opt =&gt; opt.MapFrom(src =&gt; src.ReferenceEngineId))
          .ForMember(dest =&gt; dest.Description, opt =&gt; opt.MapFrom(src =&gt; src.Description))
          .ForMember(dest =&gt; dest.Power, opt =&gt; opt.MapFrom(src =&gt; src.Horsepower)).ReverseMap();
  }
  </code></pre>
  
  <p>My question is, when property names are different, should we manually specify the TSource->TDestination and TDestination->TSource mapping? I thought the purpose of the <code>ReverseMap</code> is to avoid us from manually specifying the bi-directional mapping.</p>