我想創建一個從我們的實體模型到Dto的映射,但是我每次嘗試創建映射都失敗了。如何將具有嵌套屬性的模型映射到平面Dto?
我有兩個域類。這是我們的模型的簡化(Device
例如有很多的屬性,代表了一堆不同的東西):
class Device
{
public int Name {get; set;}
}
class DeviceAccessToken
{
public Device Device {get; set;}
public string Key {get; set;}
public string Secret {get; set;}
}
那麼我想DeviceAccessToken
實例映射到此DeviceDto
(也簡化了,它有最存在於原始Device
模型的字段):
class DeviceDto
{
public int Name {get; set;}
public string Key {get; set;}
public string Secret {get; set;}
}
有沒有一種方法來創建沒有明確指定映射中的Device
域模型的各個領域這種映射?
這實際上是我想要的,由AutoMapper輪廓表示:
class DeviceMappingProfile : Profile
{
protected override void Configure()
{
this.CreateMap<DeviceAccessToken, DeviceDto>();
this.CreateMap<Device, DeviceDto>()
.ForMember(dest => dest.Key, opt => opt.Ignore())
.ForMember(dest => dest.Secret, opt => opt.Ignore());
}
}
的.ForAllMembers
電話是一個失敗的嘗試,使這項工作,它必須不起作用像我想象它。
我知道我可以通過在DeviceAccessToken->DeviceDto
映射中指定Device
的每個屬性來做到這一點,但這將是一場噩夢,並且非常冗餘,因爲名稱相同。
小後我張貼我發現的問題[本文](https://github.com/AutoMapper/AutoMapper/wiki/Flattening )解釋了你所談論的這個約定,現在我決定使用它。但是有沒有辦法通過約定讓automapper識別屬性,而不必在嵌套屬性名稱前加前綴?就我而言,我必須創建兩個非常相似的Dtos,因爲其中一個需要有這個約定,而另一個則不需要。在某些地方,我需要將一個'Device'直接映射到'DeviceDto',這會使我的很多事情變得更簡單。 – julealgon 2014-10-10 20:15:24
@julealgon嗨,我知道你的意思,但它似乎不同於原來的問題。我會創建一個新問題,你會得到更多的人試圖回答它。我之前使用過INamingConvention更改慣例,這可能是您可以使用的。 https://github.com/AutoMapper/AutoMapper/blob/d6eaf7025932ebedccbf8c339a155e9f4ae5c5d8/src/AutoMapper/INamingConvention.cs – hutchonoid 2014-10-14 11:19:43