2017-04-18 61 views
0

我是使用automapper的新手,我想在我的項目中實現它。我試圖將多個模型從EF映射到asp項目中的單個視圖模型,但在此之前我遇到了如下問題。 enter image description here當數據庫模型從實體映射到視圖模型時,Automapper缺少類型

我試圖按照所提供的解決方案:

  1. Automapper missing type map configuration or unsupported mapping
  2. Automapper missing type map configuration or unsupported mapping?

,但沒有成功。 我正在使用最近的automapper。 我試過方法的變化來創建地圖,如

config.CreateMap<tblMeeting, MeetingViewModels>() 
      .ForMember(dest => dest.meetingDetails, input => input.MapFrom(i => new tblMeeting 
      { 
       meetingId = i.meetingId, 
       meetingType = i.meetingType??null, 
       startTime = i.startTime, 
       finishTime = i.finishTime, 
       meetingDate = i.meetingDate, 
       meetingNotes = i.meetingNotes, 
       meetingVenue = i.meetingVenue 
      })); 

  config.CreateMap<tblMeeting, MeetingViewModels>() 
      .ForMember(dest => dest.meetingDetails.meetingId, opt => opt.MapFrom(s => s.meetingId)) 
      .ForMember(dest => dest.meetingDetails.startTime, 
         opt => opt.MapFrom((s => s.startTime))) 
      .ForMember(dest => dest.meetingDetails.finishTime, 
         opt => opt.MapFrom(s => s.finishTime)) 
      .ForMember(dest => dest.meetingDetails.meetingType, 
         opt => opt.MapFrom(s => s.meetingType ?? null)) 

      .ForMember(dest => dest.meetingDetails.meetingDate, 
         opt => opt.MapFrom(s => s.meetingDate)) 
      .ForMember(dest => dest.meetingDetails.meetingVenue, 
         opt => opt.MapFrom(s => s.meetingVenue)) 
      .ForMember(dest => dest.meetingDetails.meetingNotes, 
         opt => opt.MapFrom(s => s.meetingNotes)); 


     }); 

這也

   config.CreateMap<tblMeeting, MeetingViewModels>().ConvertUsing<test(); 

    public class test : ITypeConverter<tblMeeting, MeetingViewModels> 
    { 


     public MeetingViewModels Convert(tblMeeting source, MeetingViewModels destination, ResolutionContext context) 
     { 
      MeetingViewModels m = new MeetingViewModels(); 

      m.meetingDetails.meetingId = Guid.Parse(source.meetingType.ToString()); 
      m.meetingDetails.meetingNotes = source.meetingNotes; 
      m.meetingDetails.meetingType = Guid.Parse(source.meetingType.ToString()); 
      m.meetingDetails.meetingDate = source.meetingDate; 
      m.meetingDetails.startTime = source.startTime; 
      m.meetingDetails.finishTime = source.finishTime; 
      m.meetingDetails.meetingVenue = source.meetingVenue; 

       return m; 
     } 
    } 

但不能夠解決這個問題。 如果有人可以幫助我,這將是非常有幫助的。 謝謝。

回答

2

下面是我個人實施AutoMapper在我的項目:

首先創建一個MappingConfig類,一般我把它放在App_Code文件夾中。

在我的項目,我可能在系統中不同的部分,由部分我的意思是不同的Areas或以某種方式應用程序需要在不同的部分進行邏輯上分開像User ManagementMeetings等不管你有沒有......

所以從我可以在邏輯部分劃分系統的那一刻我創建一個配置文件類各部分:

下面是配置文件類的一個示例:

public class GeneralMappingConfigProfile : Profile 
{ 
    public GeneralMappingConfigProfile() 
    { 
     CreateMap<sourceObject, destinationObject>() 
       .ForMember(d => d.X, o => o.MapFrom(s => s.Y)) 
    } 
} 

上面的類是一般映射的示例,但如果它的大小足以區分爲一個部分,則可能會有一個會議配置文件類。

然後在我的配置I類配置爲下面的所有個人資料類:

public class MappingConfig 
{ 
    public static void RegisterMappings() 
    { 
     Mapper.Initialize(config => 
     { 
      config.AddProfile<GeneralMappingConfigProfile>(); 
      config.AddProfile<MeetingsMappingConfigProfile>(); 
      //etc 
     }); 
    } 
} 

global.asax我打電話像下面的靜態方法:

MappingConfig.RegisterMappings(); 

然後我就可以創建映射多達我覺得在每個配置文件中都適合:

我剛寫了所有這些代碼,以便您可以更好地組織代碼...

對於您的情況可能有很多事情可能會導致此錯誤,但請參閱此問題here。您可以在這裏分享更多的代碼,因爲我們希望看到MeetingViewModels模型和操作代碼,因爲從數據庫獲取tblMeeting對象的方式肯定有問題。

+0

感謝您的評論,我改變了viewmodel和它的工作正常。我正在做的是在viewmodel中添加整個數據庫表作爲屬性。 – shunilkarki

+0

很高興幫助:) –

+0

@shunilkarki如果這是一個正確的答案,請將其標記爲正確的,這樣這個問題就解決了,其他人不會感到困惑 –

相關問題