2011-03-09 90 views
3

有一個問題的映射Automapper UseDestinationValue

VPerson vPerson = new VPerson() { Id = 2, Lastname = "Hansen1", Name = "Morten1" }; 
DPerson dPerson = new DPerson() { Id = 1, Lastname = "Hansen", Name = "Morten" }; 

Mapper.Initialize(x => 
{ 
    //x.AllowNullDestinationValues = true; // does exactly what it says (false by default) 
}); 

Mapper.CreateMap(); 

Mapper.CreateMap() 
     .ForMember(dest => dest.Id, opt => opt.UseDestinationValue()); 

Mapper.AssertConfigurationIsValid(); 

dPerson = Mapper.Map<VPerson, DPerson>(vPerson); 

dPerson是0,我想它應該是1,還是我失去了一些東西?

工作實例

VPerson vPerson = new VPerson() { Id = 2, Lastname = "Hansen1", Name = "Morten1" }; 
     DPerson dPerson = new DPerson() { Id = 1, Lastname = "Hansen", Name = "Morten" }; 

     Mapper.Initialize(x => 
     { 
      //x.AllowNullDestinationValues = true; // does exactly what it says (false by default) 
     }); 

     Mapper.CreateMap<DPerson, VPerson>(); 

     Mapper.CreateMap<VPerson, DPerson>() 
      .ForMember(dest => dest.Id, opt => opt.UseDestinationValue()); 


     Mapper.AssertConfigurationIsValid(); 

     dPerson = Mapper.Map(vPerson, dPerson); 

回答

6

從來沒有使用過UseDestinationValue()選項,但它看起來像你只是想從VPerson去DPerson時不會映射的ID。如果是這樣的情況下,使用忽略選項:

.ForMember(d => d.Id, o => o.Ignore()); 

編輯

拍哦 - 我甚至沒有注意到你正在使用的語法。你需要使用接受現有的目標對象「地圖」的超載:

Mapper.Map(vPerson, dPerson); 

您正在使用的版本創建一個新的DPerson,然後執行映射。我上面展示的那個採用已經創建的dPerson,然後執行映射(並且使用上面顯示的Ignore選項,您的Id不會被覆蓋)。

+0

如果我使用這個選項 – mimo 2011-03-09 19:01:39

+0

@mimo,我會得到相同的結果,請參閱我的編輯。 – PatrickSteele 2011-03-10 00:01:04

+1

現在它與UseDestinationValue一起工作,非常感謝您的幫助:-) – mimo 2011-03-10 07:39:38