programing

매핑되지 않은 자동 매핑 구성원을 찾았습니다.

skycolor 2023. 7. 1. 08:14
반응형

매핑되지 않은 자동 매핑 구성원을 찾았습니다.

프로젝트에 오토매퍼를 사용하고 있는데, 다음 오류가 무작위로 발생한 것 같습니다.

AutoMapper.자동 매핑기 구성예외:매핑되지 않은 구성원이 발견되었습니다.아래의 유형과 구성원을 검토하십시오.사용자 지정 매핑 식을 추가하거나, 무시하거나, 사용자 지정 확인자를 추가하거나, 원본/대상 유형을 수정합니다.

코드는 몇 달 동안 바뀌지 않았습니다.해당 오류가 표시됩니다. 새로 고침하면 오류가 제거되고 페이지가 정상적으로 작동합니다.사용 중

Mapper.AssertConfigurationIsValid();

매핑이 좋지 않다고 불평하는 이유가 무엇인지 잘 모르겠지만 새로 고침하면 다시 문제가 발생합니다. 누군가 이것에 부딪힌 적이 있습니까?디버깅은 무작위이기 때문에 도움이 되지 않습니다. 때로는 오류가 발생하지 않습니다. 그리고 다른 날에는 사이트 어딘가에서 오류가 나타나서 다시 시작하면 됩니다.또한 동일한 페이지나 동일한 매핑이 아닌 임의의 페이지에서도 오류가 발생합니다.

빠른 소개: @mrTurkay가 아래에 답변한 것처럼 이 문제는 다음 구성으로 해결할 수 있습니다.

cfg.ValidateInlineMaps = false;

하지만, 여러분은 왜 문제가 발생하는지 이해해야 합니다. 그러니 자유롭게 계속 읽어보세요.

이 문제는 매핑 구성을 만들지 않은 개체를 매핑하려고 할 때 발생합니다.명심해야 할 것은 매핑하려는 특정 개체일 필요는 없지만 탐색 속성 중 하나입니다.

예를 들어, 당신이 가지고 있다고 말합니다.Car.cs당신이 매핑하고 싶은 것.CarDTO.cs

Car.cs다음과 같이 표시됩니다.

public class Car
{
  public string Color { get; set; }

  public Engine Engine { get; set; }
}

그리고 당신의 DTO는 똑같아 보이지만, 그것에 대한 참조가 있습니다.EngineDTO대신:

public class CarDTO
{
  public string Color { get; set; }

  public EngineDTO Engine { get; set; }
}

매핑은 다음과 같이 구성했습니다.

    Mapper.CreateMap<DTO.CarDTO, Data.Model.Car>();
    Mapper.CreateMap<Data.Model.Car, DTO.CarDTO>();

    Mapper.CreateMap<DTO.EngineDTO, Data.Model.Engine>();
    Mapper.CreateMap<Data.Model.Engine, DTO.EngineDTO>();

다 괜찮아 보이죠?하지만, 당신의EngineDTO다음과 같은 내비게이션 속성을 가지고 있을 것입니다.

public class EngineDTO
{
public List<PartDTO> Parts { get; set; }
}

오토매퍼가 매핑되는 동안Engine로.EngineDTO또한 매핑을 시도합니다.PartDTO하지만 당신이 매핑을 선언하는 것을 잊었기 때문에.global.asax오류가 발생합니다.

AutoMapper.자동 매핑기 구성예외:매핑되지 않은 구성원이 발견되었습니다.아래의 유형과 구성원을 검토하십시오.사용자 지정 매핑 식을 추가하거나, 무시하거나, 사용자 지정 확인자를 추가하거나, 원본/대상 유형을 수정합니다.

클래스의 특정 속성을 매핑하지 않으려면 무시:

Mapper.CreateMap<Engine, EngineDTO>()
    .ForMember(x => x.Parts, opt => opt.Ignore());

편집:

보다 강력한 AutoMapper 구성을 위해 매핑을 직접 선언하는 대신 매핑 프로파일을 사용하는 것이 좋습니다.Global.asax예는 다음과 같습니다.

프로필:

public class CarProfile : Profile
{
    public CarProfile ()
    {
        CreateMap<Car, CarDTO>();
    }
}

Global.asax:

Mapper.Initialize(cfg =>
{
     cfg.AddProfile<CarProfile>();
}

그것은 검증에 관한 것입니다.

cfg.ValidateInlineMaps = false;

충분할 것입니다

저의 경우, 지도 구성을 MapConfig.cs 에 추가하는 것을 잊었습니다.

언급URL : https://stackoverflow.com/questions/27359999/auto-mapper-unmapped-members-were-found

반응형