2017-11-07 1 views
2

를 인식하지 못합니다 그것을 위해 AutoMapper의 ProjectTo 확장 방법을 사용하십시오ProjectTo 내가 (일부 필드는 단순하게 유지하기 위해 누락)과 같다 DB에서 데이터를 얻기위한 클래스가 매개 변수없는 생성자

return await _context.Branches 
      .Where(b => b.Id == message.Id) 
      .ProjectTo<BranchDetailDto>(_configuration) 
      .SingleAsync(); 

그러나이 작업은 오류가 발생하고 오류 페이지는 말한다 :

NotSupportedException : LINQ to Entities에서는 매개 변수없는 생성자와 초기화 프로그램 만 지원됩니다.

왜? 내 수업에는 매개 변수가없는 생성자가 있습니다. AutoMapper에서 인식하지 못할 수도 있습니까? 또는 정의에 단지 하나의 생성자가 필요하고 두 번째 생성자가 문제를 일으키고 있습니까? 나에게 이상하게 들린다.

편집

Automapper 버전 Automapper.EF6은 1.0.0입니다 6.1.1입니다. 이 설정과 관련하여 특별한 것은 없습니다. 모든 필드가 명명 규칙에 따라 맵핑 될 수 있으므로지도가 자동으로 생성되어야합니다 (물론 cfg의 CreateMissingTypeMaps가 true로 설정 됨).

그러나 두 번째 생성자에 매개 변수를 주석 처리했으며 작동하기 시작했습니다. 그래서 정말 두 번째 생성자와 혼동 스러워요,하지만 그것은 의도 된 동작 (클래스에서 단 하나의 생성자를 가질 수있을 것)이 아니라고 생각합니다.

+0

더 많은 정보를 제공해야합니다 : 모든 버전, 오토마터 구성 등 (dto와 엔티티 클래스의 완전한 정의가 도움이 될 수 있습니다). 그대로 재현 할 수 없습니다. – Evk

답변

2

기본적으로 AM은 가능한 경우 constructor mapping을 사용하므로 사용자의 경우 EF에서 지원하지 않는 매개 변수가있는 DTO 생성자를 사용하려고합니다.

이 문제를 해결, 중 (링크에 언급 한 바와 같이) 전 세계적으로 생성자의 매핑을 해제하려면 :

cfg.DisableConstructorMapping(); 
cfg.CreateMap<BranchDetail, BranchDetailDto>(); 

또는 오전 DTO 대상으로 투사하는 동안 매개 변수가없는 생성자를 사용할 수 있도록 ConstructProjectionUsing 방법을 사용하십시오

cfg.CreateMap<BranchDetail, BranchDetailDto>() 
    .ConstructProjectionUsing(src => new BranchDetailDto()); 
+0

당신은 절대적으로 이반 (Ivan), 작동합니다, 고마워요. –

관련 문제