2017-02-09 64 views
0

我想我找到了問題的原因,但我不知道如何解決它, 場景是這樣的:AutoMapper 5時集CreateMissingTypeMaps真正ForMember不行

我用automapper 5.2,實體框架6和使用CreateMissingTypeMaps=true救我CreateMap代碼 我也有特殊的地圖,所以初始化這樣

Mapper.Initialize(
      a => 
       { 
        a.CreateMissingTypeMaps = true; 
        a.CreateMap<query_template, QtGridUdfSearchTemplate>() 
       .ForMember(dest => dest.GridId, opt => opt.MapFrom(src => src.GRID_ID)) 
       .ForMember(dest => dest.Guid, opt => opt.MapFrom(src => src.QUERY_TEMPLATE_GUID)) 
       .ForMember(dest => dest.TemplateName, opt => opt.MapFrom(src => src.TEMPLATE_NAME)) 
       .ForMember(dest => dest.CreatedBy, opt => opt.MapFrom(src => src.CREATED_BY)) 
       .ForMember(dest => dest.IsDefault, opt => opt.MapFrom(src => src.IS_DEFAULT)) 
       .ForMember(dest => dest.IsOffset, opt => opt.MapFrom(src => src.IS_OFFSET)); 
       } 
     ); 

和地圖代碼代碼

var source = DbContext.Set<query_template>().Find(keyValue); 
var dest = Mapper.Map<query_template, QtGridUdfSearchTemplate>(source); 

我得到的dest所有屬性都爲空,當我在Initialize中刪除a.CreateMissingTypeMaps = true;時,它是工作的,dest所有屬性都可以映射。

然後我找到了source類型是System.Data.Entity.DynamicProxies.query_template_80DE6B32EB08D5DFDD560580BB004DAD6A7FF27B94A3517A6BB4044B01FB8272,所以我覺得當我設置CreateMissingTypeMaps,autoMapper自動創建一個地圖,不是我創造

很多帖子建議context.Configuration.ProxyCreationEnabled = false;但我使用LazyLoad。並且不想刪除CreateMissingTypeMaps,因爲我有許多要映射的正常類型。

任何人都可以幫助我嗎?

回答

0

而不是把ForMember(...)的,請嘗試:

ForMember<ObjectThatYouWantMap>(*Expression*); 
+0

感謝豪爾赫,它不適合我,我也要求在GitHub上,https://github.com/AutoMapper/AutoMapper/issues/1954,即表示除非在運行時不知道類型,否則不要使用CreateMissingTypeMaps – Gavin