2016-09-01 2 views
1

중복 된 질문으로 표시 될 수 있습니다. 예,에 이미 대답했을 수도있는 개의 질문을 검토했지만 여전히 답을 찾을 수 없습니다.Automapper v5.1.1 - 순환 참조

대부분의 다른 질문과 관련하여 내 문제는 서로를 참조하는 모델과 관련되어 있습니다. 나는 아이들을 위해 별도의 DTO 객체를 만들기 위해 코드를 리팩터링하는 것과 같이 내가 따를 수있는 다른 접근법을 잘 알고있다. 문제는 모델과 리팩토링이 상당히 번거로워 모든 것이 매우 복잡하다는 것입니다.

나는 다음과 같은 내용의 Automapper v5.0 Upgrade Guide을 읽고 : 내가 해봤

enter image description here

- 예제 ClientModel을 위해 :

var clientModelMap = CreateMap<Client, ClientModel>() 
    .ForMember(dest => dest.Id, source => source.MapFrom(x => x.ClientId)) 
    .ForMember(dest => dest.InvoicePayments, source => source.Ignore()); 

clientModelMap.MaxDepth(1); 
clientModelMap.PreserveReferences(); 

뿐만 아니라 Project 모델로 :

var projectModelMap = CreateMap<Project, ProjectModel>() 
    .ForMember(dest => dest.Client, source => source.Ignore()) 
    .ForMember(dest => dest.Id, source => source.MapFrom(x => x.ProjectId)) 
    .ForMember(dest => dest.ClientName, source => source.MapFrom(x => x.Client.ClientName)) 
    .ForMember(dest => dest.ClientTariff, source => source.MapFrom(x => x.Client.Tariff)) 
    ; 
projectModelMap.MaxDepth(1); 
projectModelMap.PreserveReferences(); 
  • 는 클라이언트가
    • 프로젝트 (각 클라이언트가 많은 프로젝트를 가지고)
      • 리소스 (각 프로젝트는 프로젝트 관리자가)
        • 프로젝트는 (

          을 관련되어 다음과 같이

          구조는 그/그녀가 일하고있는 하나 이상의 프로젝트들과 함께)

        • 클라이언트 (클라이언트와 연관되어/S 매니저)

그러나 이것은 아무런 영향을 미치지 않습니다, 나는 여전히 StackOverflowException을받을 수 있습니다. 나는 무엇을 놓치고 잘못 했는가?

내가 갈 길이 멀지 않은 경우 제안을 위해 열려 있습니다.

감사합니다.

+0

[MVCE] (http://stackoverflow.com/help/mcve)를 설정할 수 있습니까? – stuartd

+0

@stuartd - 응답 해 주셔서 감사합니다. 나는 실제로 내 문제를 발견했다. v5.0 가이드에서 제공하는 코드 예제는 올바르게 작동합니다. 문제는 모델 계층 구조에서 더 이상 구현하지 않았다는 것입니다. –

+0

'MaxDepth (x)'를 더 잘 이해하기 위해서 : 기본적으로 다음과 같은 내용이 있습니다. 맵핑되는 지정된 모델에 대한 맵핑 프로파일을 입력 할 때마다 최대 값에 도달했는지 점검합니다. 따라서'Client'가'Project'와'User'를 참조 할 수 있다면, 2로 설정하십시오. 맞습니까? –

답변

0

(OP 대신 게시 됨).

예상대로 작동합니다. 나머지 모델 계층의 매핑 프로파일을 업데이트하기 만하면됩니다.