2014-04-16 4 views
1

Automapper 'Project'메서드를 사용하여 EF 도메인 개체와 DTO 개체 간의 매핑을 수행하려고하지만 인터페이스에서 콘크리트 클래스로 프로젝트를 투영하려고 할 때 문제가 있습니다. . 내 EF 도메인 객체는 내 룩업 테이블에 일반적으로 사용하는 인터페이스 구현합니다Automapper 프로젝트 인터페이스에서 콘크리트 클래스

public interface ILookupItem 
{ 
    int Id { get; set; } 
    string Name { get; set; } 
} 

을 여기에 내 도메인 오브젝트의 예 :

내 응용 프로그램에서
public partial class ReportType : ILookupItem 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

, 나는 DTO 객체를 사용하고 있습니다

,536 :

public class LookupItemModel 
{ 
    public static void CreateMapping(IConfiguration configuration) 
    { 
     configuration.CreateMap<ILookupItem, LookupItemModel>(); 
    } 

    public int Id { get; set; } 
    public string Name { get; set; } 
} 

나는 다음과 같은 호출 내 데이터베이스 쿼리를 수행하는 정확히 도메인 객체 인터페이스를 일치

return DbContext.Query<ReportType>().Project().To<LookupItemModel>(); 

그러나이 전화에 Automapper는 기능을 수행하기 위해 필요한 매핑 누락에 대한 오류를 제공합니다 :

Missing map from ReportType to LookupItemModel. Create using Mapper.CreateMap<ReportType, LookupItemModel>. 
내가 매핑이 알 필요합니다 모든 이후 인터페이스에서 수행 할 수 있다고 가정했을

데이터를 가져 오는 속성입니다 (Id & 이름). 인터페이스의 각 구체적 구현을위한 맵을 만들지 않고도이 프로젝션을 수행 할 수있는 기능이 누락 되었습니까?

감사합니다.

+2

LookupItemModel에서 CreateMapping()을 호출 한 적이 있습니까? –

답변

1

나는 의견을 물었지만 아직 응답을 얻지는 못했지만, 이것이 당신의 문제라는 것을 확실히 알고 있으므로 나는 대답을 할 것입니다.

ILookupItem과 LookupItemModel간에 매핑을 만들지 만지도를 만드는 메서드를 호출하지 않습니다 (LookupItemModel.CreateMapping()). 당신은 매핑을 수행하기 전에

이 메서드를 호출해야합니다 대신 모델 내부에 매핑 로직을 설정,

LookupItemModel.CreateMapping(your IConfiguration); 
return DbContext.Query<ReportType>().Project().To<LookupItemModel>(); 

말했다, 나는 모든 맵을 설정하는 AutoMapper 구성 클래스를 만들 것 . 같은 뭔가 :

public class AutoMapperConfig { 
    public static CreateMaps() { 
     CreateLookupItemMaps(); 
    } 

    public static CreateLookupItemMaps() { 
     Mapper.CreateMap<ILookupItem, LookupItemModel>(); 
    } 
} 

아니면 청소기 방식은 AutoMapper Profiles

을 사용 그리고 앱 시작시 AutomapperConfig.CreateMaps()를 호출하는 것입니다 그리고 당신은 잘해야합니다.

+0

죄송합니다. 초기 설명에이 내용을 포함해야합니다. 내 모델의 'CreateMapping'메소드가 Automapper의 IoC 구성의 일부로 호출되고 있습니다. 애플리케이션을 시작할 때, 리플렉션을 사용하여 내 프로젝트의 모든 유형에서 모든 정적 'ConfigureMapping'메소드를 찾고 각각의 발견 된 메소드를 실행합니다. 내 모델을 구축/업데이트 할 때 모든 관련 매핑 구성이 바로 여기에 있으므로이 방식으로 내 모델의 구성을 구성하는 것이 더 좋습니다. – skaaks

관련 문제