엔티티 모델에서 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;}
}
그때 또한 단순화이
DeviceDto
(에
DeviceAccessToken
인스턴스를 매핑 할
, 그것의 대부분을 가지고 원래 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
@julealgon 안녕하세요, 무슨 뜻인지는 알지만 원래 질문과는 다른 것 같습니다. 나는 새로운 질문을 만들 것입니다, 당신은 더 많은 사람들이 대답하려고 노력할 것입니다. 전에 INamingConvention을 사용하여 사용자가 사용할 수있는 규칙을 변경했습니다. https://github.com/AutoMapper/AutoMapper/blob/d6eaf7025932ebedccbf8c339a155e9f4ae5c5d8/src/AutoMapper/INamingConvention.cs – hutchonoid