중복 된 질문으로 표시 될 수 있습니다. 예,에 이미 대답했을 수도있는 개의 질문을 검토했지만 여전히 답을 찾을 수 없습니다.Automapper v5.1.1 - 순환 참조
대부분의 다른 질문과 관련하여 내 문제는 서로를 참조하는 모델과 관련되어 있습니다. 나는 아이들을 위해 별도의 DTO 객체를 만들기 위해 코드를 리팩터링하는 것과 같이 내가 따를 수있는 다른 접근법을 잘 알고있다. 문제는 모델과 리팩토링이 상당히 번거로워 모든 것이 매우 복잡하다는 것입니다.
나는 다음과 같은 내용의 Automapper v5.0 Upgrade Guide을 읽고 : 내가 해봤- 예제 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
을받을 수 있습니다. 나는 무엇을 놓치고 잘못 했는가?
내가 갈 길이 멀지 않은 경우 제안을 위해 열려 있습니다.
감사합니다.
[MVCE] (http://stackoverflow.com/help/mcve)를 설정할 수 있습니까? – stuartd
@stuartd - 응답 해 주셔서 감사합니다. 나는 실제로 내 문제를 발견했다. v5.0 가이드에서 제공하는 코드 예제는 올바르게 작동합니다. 문제는 모델 계층 구조에서 더 이상 구현하지 않았다는 것입니다. –
'MaxDepth (x)'를 더 잘 이해하기 위해서 : 기본적으로 다음과 같은 내용이 있습니다. 맵핑되는 지정된 모델에 대한 맵핑 프로파일을 입력 할 때마다 최대 값에 도달했는지 점검합니다. 따라서'Client'가'Project'와'User'를 참조 할 수 있다면, 2로 설정하십시오. 맞습니까? –