2017-03-16 4 views
0

CreateMissingTypeMaps와 수동 매핑을 "동시에"(또는 적어도 같은 구성에서) 사용해야하는 경우가 있습니다.EF 프록시 클래스로 CreateMissingTypeMaps 옵션과 수동 매핑을 사용하는 방법은 무엇입니까?

시나리오 : 도메인 및보기 모델 클래스는 프로필을 사용하여 수동으로 매핑됩니다. CreateMissingTypeMaps 속성은 익명 개체를 반환하는 레거시 시스템에 액세스하기위한 부패 방지 레이어가 있기 때문에 필요합니다.

문제는 수동 매핑이 true로 설정된 경우 CreateMissingTypeMaps 옵션에 의해 매핑이 숨겨져 있고 false 일 때 익명 개체를 매핑 할 수 없다는 것입니다.

MapperConfiguration 내부, 프로필 내부 및 매핑 조건이있는 프로필 내부에서 CreateMissingTypeMaps를 설정하려고했지만 모두 실패했습니다.

아래 코드는 익명 개체에만 적용해야하는 조건부 프로필을 수행하려는 시도입니다.

public class AnonymousProfile : Profile 
    { 
     public AnonymousProfile() 
     { 
      AddConditionalObjectMapper().Where((s, d) => s.GetType().IsAnonymousType()); 
      CreateMissingTypeMaps = true; 
     } 
    } 

    // inside my MapperConfiguration 
    cfg.AddProfile(new AnonymousProfile()); // also tried cfg.CreateMissingTypeMaps = true; 

[편집 :] 원래 질문은 EF 언급하지 않았다 그러나 나는 그것의 프록시 클래스는 문제의 일부임을 발견했다.

+0

문제를 재현하는 샘플 코드를 제공해 주시겠습니까? –

+0

@IvanStoev EF 프록시 클래스를 사용할 때 문제가 발생한다는 것을 발견했을 때 간단한 데모 코드를 작성했습니다. 한편, 제 질문은 기스 투프 (Github)에 대한 답변이었습니다. 이제는 제 질문에 대한 답을 쓰고 있습니다. 내 질문에 관심을 가져 주셔서 감사합니다. –

답변

0

나는 Tyler on Github이 지적한 these 방향에 따라 코드를 리팩터링했습니다.

public class AnonymousProfile : Profile 
{ 
    public AnonymousProfile() 
    { 
     AddConditionalObjectMapper().Where((s, d) => 
      s.IsAnonymousType() && s.Namespace != "System.Data.Entity.DynamicProxies"); 
    } 
} 
: 내 anonymous type check

  1. (나는 GetType을 사용하지 말아야) System.Data.Entity.DynamicProxies에서
  2. 객체가

내 다시 AnonymousProfile 클래스을 무시해야 할 버그가 있었다