2011-07-07 53 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