2015-06-09 118 views
0

我有兩個類AutoMapper不同的情況下

public class PatientViewModel 
{ 
    public int Id { get; set; }  

    public string FirstName { get; set; } 

    public string MiddleName { get; set; } 

    public string LastName { get; set; }   

    public DateTime DOB { get; set; } 

} 

public class PatientExtended : PatientViewModel 
{ 

    public string FullName { get; set; } 

    public string IsActive { get; set; } 

    public class IsActiveResolver : ValueResolver<bool, string> 
    { 
     protected override string ResolveCore(bool source) 
     { 
      return source ? "Active" : "InActive"; 
     } 
    } 
} 

我映射的EntityFramework與我的自定義類PatientViewModel成功在以下功能患者對象。它給出了預期的結果。

private List<PatientExtended> GetPatientFromDB() 
    { 
     IList<Patient> patient = db.Patients.ToList(); 

     Mapper.CreateMap<Patient, PatientExtended>().ForMember(s =>s.IsActive,m => m.ResolveUsing<MvcWithAutoMapper.Models.PatientExtended.IsActiveResolver>().FromMember(x => x.IsActive));    

     IList<PatientExtended> patientViewItem = Mapper.Map<IList<Patient>,IList<PatientExtended>>(patient); 

     return patientViewItem.ToList(); 
} 

這裏,在功能我得到的名單患者與狀態活動和非活動。現在

,我試圖讓在功能

public ActionResult Details(int id) 
    { 
     Patient patient = db.Patients.Where(x => x.Id == id).FirstOrDefault();    

     Mapper.CreateMap<Patient, PatientExtended>().ForMember(dest => dest.IsActive, opt => opt.MapFrom(src => src.IsActive == true ? "Active" : "InActive")).ForMember(cv => cv.FullName, m => m.MapFrom(s => s.FirstName + " " + s.MiddleName + " " + s.LastName)); 

     patientViewItem = Mapper.Map<Patient, PatientExtended>(patient); 

     return View(patientViewItem); 
    } 

這裏病人的詳細資料,我試圖讓病人的全名。但是,它即將到來。然後,我添加了.ForMember(cv => cv.FullName,m => m.MapFrom(s => s.FirstName +「」+ s.MiddleName +「」+ s.LastName));GetPatientFromDB()函數 CreateMap方法,並能夠在第二個函數中獲得FullName。

似乎,AutoMapper像靜態工作。那麼在我的情況下,我怎樣才能在不同的函數中創建不同的實例CreateMap? 因爲,在一個地方,我想只有狀態和其他地方,我想 有狀態全名兩者。 我該如何做到這一點?

+0

我遵循同樣的一種模式,但我爲每一個類型的視圖特定視圖模型。 Mapper.CreateMap 。我個人認爲沒有辦法像你想的那樣去做。 – mac10688

+1

[在Automapper中使用配置文件映射具有不同邏輯的相同類型]的可能重複(http://stackoverflow.com/questions/2183401/using-profiles-in-automapper-to-map-the-same-types-with - 不同邏輯) – Juan

回答