2011-07-07 168 views
1

基礎所以我有這樣兩類:幫助理解AutoMapper

public class PhysicalTest 
    { 
     public int ID { get; set; }  
     public DateTime CreationDate { get; set; } 
     public int Weight { get; set; } 
     public int Height { get; set; } 
     public int Systolic { get; set; } 
     public int Diastolic { get; set; } 
     public int Pulse { get; set; } 
} 

public class PhysicalTestFormViewModel 
    { 
     public int ID { get; set; }  
     public DateTime CreationDate { get; set; } 
     [Required] 
     public int Weight { get; set; } 
     [Required] 
     public int Height { get; set; } 
     public int Systolic { get; set; } 
     public int Diastolic { get; set; } 
     public int Pulse { get; set; } 
} 

這是我AutoMapper配置

Mapper.CreateMap<PhysicalTestFormViewModel, PhysicalTest>(); 

當我這樣做只是正常

[HttpPost] 
     public ActionResult Create(int ehrId, PhysicalTestFormViewModel physicaltestvm) 
     { 
      EHR ehr = ehrRepository.Find(ehrId); 
      if (ehr.UserName != User.Identity.Name) 
       return View("Invalid Owner"); 

      if (ModelState.IsValid) 
      { 
       PhysicalTest physicalTest= new PhysicalTest(); 
       Mapper.Map(physicaltestvm, physicalTest); 
       physicalTest.PerformedBy = "Yo"; 
       physicalTest.CreationDate = DateTime.Now; 
       ehr.PhysicalTests.Add(physicalTest); 
       ehrRepository.Save(); 
       return RedirectToAction("Index"); 
      } 
      else 
      { 
       return View(physicaltestvm); 
      } 
     } 

但是當我這樣做時,我得到一個錯誤

試圖映射Summumnet.PhysicalTest 到 Summumnet.ViewModels.PhysicalTestFormViewModel。 缺少類型映射配置或 不受支持的映射。類型爲 的例外引發了'AutoMapper.AutoMapperMappingException' 。

public ActionResult Edit(int ehrId, int id) 
     { 
      EHR ehr = ehrRepository.Find(ehrId); 
      if (ehr.UserName != User.Identity.Name) 
       return View("Invalid Owner"); 
      var physicalTest = ehr.PhysicalTests.Where(test => test.ID == id).Single(); 
      PhysicalTestFormViewModel physicaltestvm = new PhysicalTestFormViewModel(); 
      Mapper.Map(physicalTest, physicaltestvm); 
      return View(physicaltestvm); 
     } 

在錯誤被拋出,我只是想構造一個視圖模型顯示的編輯形式的場景....什麼是這樣做的標準方式嗎?

回答

3

你只是定義的映射從PhysicalTestFormViewModelPhysicalTest

Mapper.CreateMap<PhysicalTestFormViewModel, PhysicalTest>(); 

您還需要一個相反:

Mapper.CreateMap<PhysicalTest, PhysicalTestFormViewModel>(); 

this相關的SO問題和答案。

0

你可以這樣做,你不要創建任何地圖

public ActionResult (PhysicalTestFormViewModel ptvm) 
{ 
    //other to wrote codes 
EHR ehr = ehrRepository.Find(ehrId); 

AutoMapper.Mapper.DynamicMap<PhysicalTestFormViewModel, PhysicalTest>(ptvm, ehr); 

db.SaveChanges(); 
} 
+0

真棒動態映射。感謝這一點 – ignaciofuentes