2014-01-16 51 views
0

求解:我有一個屬性定義錯誤!Automapper - 使用IEnumerable映射對象<anotherType>

我收到此錯誤... 缺少類型映射配置或不支持的映射。 映射類型: HouseDomain - > RoomDomain {命名空間} .HouseDomain - > {命名空間} .RoomDomain

目標路徑: City.Houses.Houses.Houses0 [0]

因此,例如,我有

public class CityDomain 
{ 
    public IEnumerable<HouseDomain> DomainHouses {get;set;} 
} 
public class HouseDomain 
{ 
    public IEnumerable<RoomDomain> DomainRooms {get;set;} 
}  
public class RoomDomain 
{ 
    //whatever 
} 

public class CityDto 
{ 
    public IEnumerable<HouseDto> DtoHouses {get;set;} 
} 
public class HouseDto 
{ 
    public IEnumerable<RoomDto> DtoRooms {get;set;} 
} 
public class RoomDto 
{ 
    //whatever 
} 

所以我想CityDomain映射到企業所得稅。 yDto。我有...

Mapper.CreateMap<CityDomain , CityDto>(); 

是否有這樣一個問題2層深?任何幫助?謝謝!

+0

如果你已經發布了'CreateMap'的底部,你不需要第二個'.ForMember'片段。如果元素類型被映射,AutoMapper會自動處理列表/枚舉類型。 –

+1

這適用於我http://pastebin.com/6uZyDhbi –

+0

@AndrewWhitaker,Automapper自動處理列表/枚舉,如果他們只有相同的名字。 –

回答

3

這是你需要的所有映射(Automapper是足夠聰明的映射對象的列表,如果適當的對象類型映射創建):

Mapper.CreateMap<RoomDomain, RoomDto>(); 
Mapper.CreateMap<HouseDomain, HouseDto>() 
     .ForMember(d => d.DtoRooms, m => m.MapFrom(s => s.DomainRooms)); 

只是刪除你的第二個映射爲成員DtoRooms。例如。如果房子有ID和房間都有名字,那麼對於示例域房子測繪工作得很好:

HouseDomain domainHouse = new HouseDomain 
{ 
    Id = 42, 
    DomainRooms = new List<RoomDomain> 
    { 
     new RoomDomain { Name = "foo" }, 
     new RoomDomain { Name = "bar" } 
    } 
}; 

var dtoHouse = Mapper.Map<HouseDto>(domainHouse); 

產地:

{ 
    Id: 42, 
    DtoRooms: [ { Name: "foo" }, { Name: "bar" } ] 
} 

最後一個音符 - 確保你創建的地圖,你正在做的映射之前。通常所有地圖都是在應用程序啓動時創建的

1

你可以保持您的映射simplier如果你讓兩個HouseDomainHouseDto集合類型相同(例如Rooms)的名字。

映射:

Mapper.CreateMap<RoomDomain, RoomDto>(); 
Mapper.CreateMap<HouseDomain, HouseDto>(); 

類型:

public class HouseDomain 
{ 
    public IEnumerable<RoomDomain> Rooms {get;set;} 
} 

public class HouseDto 
{ 
    public IEnumerable<RoomDto> Rooms {get;set;} 
} 

我剛纔回答了類似的問題AutoMapping nested models