2011-08-16 75 views
5

UseDestinationValue做什麼?AutoMapper和「UseDestinationValue」

我在問,因爲我有一個基類和繼承類,對於基類,我很想讓AutoMapper爲我帶來現有的值。

它會這樣做嗎? (我看了一下,是唯一的例子,我可以看到UseDestinationValue涉及名單是不是隻對名單

我能做到這一點:??

PersonContract personContract = new PersonContract {Name = 'Dan'}; 
Person person = new Person {Name = "Bob"}; 
Mapper.CreateMap<PersonContract, Person>() 
     .ForMember(x=>x.Name, opt=>opt.UseDestinationValue()); 

person = Mapper.Map<PersonContract, Person>(personContract); 

Console.WriteLine(person.Name); 

,並具有輸出是鮑勃

回答

3

我寫了這整個問題,然後想,真不錯!只要運行它,看看。

它的工作原理,因爲我所希望的。

這是我結束了代碼:

class Program 
{ 
    static void Main(string[] args) 
    { 
     PersonContract personContract = new PersonContract {NickName = "Dan"}; 
     Person person = new Person {Name = "Robert", NickName = "Bob"}; 
     Mapper.CreateMap<PersonContract, Person>() 
      .ForMember(x => x.Name, opt => 
             { 
              opt.UseDestinationValue(); 
              opt.Ignore(); 
             }); 

     Mapper.AssertConfigurationIsValid(); 

     var personOut = 
      Mapper.Map<PersonContract, Person>(personContract, person); 

     Console.WriteLine(person.Name); 
     Console.WriteLine(person.NickName); 

     Console.WriteLine(personOut.Name); 
     Console.WriteLine(personOut.NickName); 
     Console.ReadLine(); 
    } 
} 

internal class Person 
{ 
    public string Name { get; set; } 
    public string NickName { get; set; } 
} 

internal class PersonContract 
{ 
    public string NickName { get; set; } 
} 

產量爲:

羅伯特

羅伯特

+4

這是一樣的只是使用忽略()。 – Monstieur

1

我被帶到這裏有類似的問題,但關於嵌套類和保持目標值。我以任何可能的方式嘗試了上面的內容,但它不適用於我,事實證明,您還必須在父對象上使用UseDestinationValue。我要離開這裏,以防其他人遇到同樣的問題。我花了一些時間纔得到它的工作。我一直在想,問題在於AddressViewModel =>地址映射。

在BidderViewModel類中,BidderAddress是AddressViewModel類型。我需要在地址ID不爲空的情況下保留地址ID。

Mapper.CreateMap<BidderViewModel, Bidder>() 
    .ForMember(dest => dest.BidderAddress, opt=> opt.UseDestinationValue()) 
    .ForMember(dest => dest.ID, opt => opt.UseDestinationValue()); 
Mapper.CreateMap<AddressViewModel, Address>() 
    .ForMember(dest => dest.ID, opt => { opt.UseDestinationValue(); opt.Ignore(); }); 

使用(其中視圖模型的類型BidderViewModel由MVC中的視圖返回):

Bidder bidder = Mapper.Map<BidderViewModel, Bidder>(viewModel, currentBid.Bidder)