我有兩個類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? 因爲,在一個地方,我想只有狀態和其他地方,我想 有狀態和全名兩者。 我該如何做到這一點?
我遵循同樣的一種模式,但我爲每一個類型的視圖特定視圖模型。 Mapper.CreateMap。我個人認爲沒有辦法像你想的那樣去做。 –
mac10688
[在Automapper中使用配置文件映射具有不同邏輯的相同類型]的可能重複(http://stackoverflow.com/questions/2183401/using-profiles-in-automapper-to-map-the-same-types-with - 不同邏輯) – Juan