2014-12-15 1 views
0

VM과 GM의 네임 스페이스가 필요합니다. 둘 다 클래스 직원이 있습니다. 직원은 부서를 포함합니다. VM.Employee를 GM.Employee에 매핑하려고합니다. Mapper에서 Department 부서를 허용하지 않습니다.오토 데스크와 복잡한 클래스를 매핑하는 방법

class VM.Employee 
{ 
    int Id {get;set;} 
    int Name {get;set;} 
    VM.Department dept{get;set;} 
} 

class VM.Department 
{ 
    int Id {get;set;} 
    int Name {get;set;} 
} 

class GM.Employee 
{ 
    int Id {get;set;} 
    int Name {get;set;} 
    GM.Department dept{get;set;} 
} 

class GM.Department 
{ 
    int Id {get;set;} 
    int Name {get;set;} 
} 
+4

당신이 부서에 대한이 개 동일한 클래스를 필요합니까 왜? –

+0

향후 GM 모델에는 몇 가지 추가 속성이 포함될 수 있습니다. VM은 DB와 상호 작용합니다. –

답변

1

사실, 그리 어렵지 않습니다. 수동이의 라인을 따라, 필드에 의해 뭔가를 필드를 매핑 할 수 있습니다 :

 Mapper.CreateMap<VM.Employee, GM.Employee>() 
       .ForMember(vm => vm.Department, 
         mapping => mapping.MapFrom(gm => gm.Department)) 

     Mapper.CreateMap<VM.Department, GM.Department>() 
       .ForMember(vm => vm.SomeFieldOfVmDepartment, 
         mapping => mapping.MapFrom(gm => gm.SomeFieldOfGmDepartment)) 
       .ForMember(vm => vm.AnotherField, 
         mapping => mapping.MapFrom(gm => gm.AnotherField)) 

Automapper 기반 규칙과 자동 두 개의 클래스를 매핑 할 때 동일하게 명명 된 필드와 일치합니다. 그러나 맵핑하려는 클래스가 다른 필드 (이름 또는 필드 수가 다른 경우)가있는 경우 Automapper는 매핑하려는 필드를 알 수 없으므로 명시 적으로 지정해야합니다.

당신은 물론, 추가 정보를 원하시면 AutoMapper의 문서를 읽어야 Automapper Documentation

+0

내 요구에 가깝습니다. 하지만 공통적 인 것은 Department 클래스를 사용해야합니다. 그래서 저는 Employee 클래스에서 VM 네임 스페이스의 Department 클래스를 사용하고 있습니다. 하지만 VM.Employee와 GM.Employee에 대해 VM.Department를 별도로 사용하고 싶습니다. –

+0

달성하고자하는 것이 정확히 무엇인지 모르겠지만 두 가지 부서 수업을 사용할 수는 있습니다. 그들을지도로 만드십시오. Baiscally, 다른 부서 클래스를 매핑 한 다음 Employees 클래스를 매핑합니다 (위의 대답과 동일). –

+0

Mapper.CreateMap () .ForMember (vm => vm.Department, 매핑 => mapping.MapFrom (gm => gm.Department)) 이것은 Mapper.CreateMap () .ForMember (vm => vm.Department, 매핑 => 매핑)에서 작동하지 않습니다. MapFrom (VM => VM.Department))가 작동합니다. –

관련 문제