2009-12-01 1 views
3

AutoMapper를 사용하여 CustomerDTO를 내 도메인 엔터티 ICustomer와 매핑하려고합니다. 첫 번째 상속 수준에서는 모든 것이 잘 작동하지만 다른 수준에서는 그렇지 않습니다.일반 유형 상속을 사용하는 AutoMapper

구체적인 유형이 LinqToSql 데이터베이스 인프라 스트럭처 레이어의 StructureMap에 의해 주입되므로 내 도메인 모델에 인터페이스를 사용하고 있습니다. 이제

public interface IBaseEntity<TPk> 
{ 
    TPk Id { get; } 
} 

public interface ICustomer : IBaseEntity<int> 
{ 
    string Email { get; set; } 
} 

[DataContract] 
public class CustomerDTO 
{ 
    [DataMember] 
    public int Id { get; set; } 

    [DataMember] 
    public string Email { get; set; } 
} 

AutoMapper 매핑 내가 내가 "ID"속성에 키 예외 누락 사전도있어

public CreateCustomerServiceResult CreateCustomer(CustomerDTO customer) 
    { 
     var result = new CreateCustomerServiceResult(); 
     try 
     { 
      var originalMapped = Mapper.DynamicMap<CustomerDTO, ICustomer>(customer); 

      var newCustomer = _customerService.CreateCustomer(originalMapped); 

      var newMapped = Mapper.DynamicMap<ICustomer, CustomerDTO>(newCustomer); 

      result.Customer = newMapped; 
     } 
     catch (Exception ex) 
     { 

     } 
     return result; 
    } 

매핑을 사용하고 지금

Mapper.CreateMap<CustomerDTO, ICustomer>(); 

Mapper.CreateMap<ICustomer, CustomerDTO>(); 

Mapper.AssertConfigurationIsValid(); 

...

답변

1

알 수 있습니다.

이 문제는 IBaseEntity의 "Id"속성 설정자가 없기 때문에 발생했습니다. 그는 단지 당신이 컴파일시에 유형을 모르는 경우 예약거야 - "DynamicMap"를 할 필요가 없습니다 -

그 모든 것을 변경 한 후

public interface IBaseEntity<TPk> 
{ 
    TPk Id { get; set; } 
} 
+0

한가지를 작동합니다. 대신 Mapper.Map을 사용하십시오. –