나는 this example on AutoMapper's GirHub을 읽었지만, 예를 하나만 적 InnerSource를 매핑하는 방법이있을 것입니다 가정 : EF로 만든, 내가 객체를 직렬화하고있어 내 프로젝트와AutoMapper 복잡한 중첩 된 매핑
Mapper.CreateMap<OuterSource, OuterDest>();
Mapper.CreateMap<InnerSource, InnerDest>();
Mapper.AssertConfigurationIsValid();
var source = new OuterSource
{
Value = 5,
Inner = new InnerSource {OtherValue = 15}
};
var dest = Mapper.Map<OuterSource, OuterDest>(source);
그 순환 참조가있다. 그 이유는 서로 다른 방향의 물건을 찾아야하기 때문입니다. 예를 들어, 사용자 목록을 요청하면 관련된 프로젝트를보고 싶습니다. 프로젝트를 요청하면 해당 프로젝트와 관련된 사용자를보고 싶습니다.
이 순환 참조 등 User.Role.Project.TaskTime.User
, User.TaskTime.Project.Task.TaskType.VisibleToRole.Role.User
처럼
현재 내가하고 있어요 :
Mapper.CreateMap<User, UserFull>()
.ForMember("TaskTimes", opt => opt.MapFrom(src => Mapper.Map<ICollection<TaskTime>, UserTaskTime>(src.TaskTimes)));
Mapper.CreateMap<TaskTime, UserTaskTime>()
.ForMember("Task", opt => opt.MapFrom(src => Mapper.Map<Task, UserTaskTimeTask>(src.Task)));
//...
viewmodels을 그 조각이 모습이 바로이
public class UserFull
{
public string Email { get; set; }
public string Name { get; set; }
public virtual ICollection<TaskTime> TaskTimes { get; set; }
//...
}
public class UserTaskTime
{
public int Id { get; set; }
public Task Task { get; set; }
//...
}
public class UserTaskTimeTask
{
//...
}
인가? 뷰 모델에서 각 멤버를 투영하고 프로젝션을 사용하여 손으로 매핑해야합니까? 아니면 이것을하는 더 깨끗한 방법이 있습니까?
오토메이더를 사용하여 ViewModel의 값을 DB 엔터티에 매핑하고 있습니까? 이 목적을 위해 AutoMapper를 사용하지 말고 수동으로하지 말라고 강력히 조언합니다. 그렇지 않으면 맵핑을 위해 이전 엔티티를 사용하는 새로운 엔티티를 추가하는 경우 계속 실패 할 복잡한 맵퍼 프로파일로 끝납니다. –