2011-09-28 46 views
10

的實例,我有以下來源類型:如何使AutoMapper創建

public class Source 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string Address1 { get; set; } 
    public string Address2 { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string ZipCode { get; set; } 
} 

我有以下的目標類型:

public class Destination 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 

    public Address HomeAddress { get; set; } 
} 

public class Address 
{ 
    public string Address1 { get; set; } 
    public string Address2 { get; set; } 
    public string City { get; set; } 
    public string State { get; set; } 
    public string PostalCode { get; set; } 
} 

我創建了一個映射:

Mapper.CreateMap<Source, Destination>(); 

如何配置我的映射,以便它將創建Address的一個實例,並使用t映射Address.PostalCode屬性他來源屬性ZipCode?

回答

9

使用AfterMap後,您可以指定如何在AutoMapper完成映射後進一步映射實體。

Mapper.CreateMap<Source, Destination>() 
       .AfterMap((src, dest) => 
           { 
            dest.HomeAddress = new Address {PostalCode = src.ZipCode}; 
           } 
      ); 
+0

我試過了。不起作用。表達式'dest =>轉換(dest.Address.PostalCode)'必須解析爲頂級成員。 – Dismissile

+0

此外,我不想將初始化放到構造函數中,因爲我不想在實例化新目標時始終創建和地址,只有當我從源地圖創建時才需要創建地址。 – Dismissile

+0

@Dismissile,因爲您正在解決'Convert(...)'而不是'dest.Address.PostalCode',所以失敗。另外,看看這裏的例子:https://github.com/AutoMapper/AutoMapper/wiki/Projection它看起來像你可能不需要包含空的構造函數,只要這兩個類都有默認的構造函數。 – scottm