所以我有这两个课程:
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);
}
在抛出错误的场景中,我只想构建一个ViewModel来显示一个Edit表单....这样做的标准方法是什么?
答案 0 :(得分:3)
您只定义了从PhysicalTestFormViewModel
到PhysicalTest
的映射:
Mapper.CreateMap<PhysicalTestFormViewModel, PhysicalTest>();
你还需要相反的一个:
Mapper.CreateMap<PhysicalTest, PhysicalTestFormViewModel>();
请参阅this相关的SO问题和答案。
答案 1 :(得分:0)
您可以在不必创建任何地图的情况下进行动态映射
public ActionResult (PhysicalTestFormViewModel ptvm)
{
//other to wrote codes
EHR ehr = ehrRepository.Find(ehrId);
AutoMapper.Mapper.DynamicMap<PhysicalTestFormViewModel, PhysicalTest>(ptvm, ehr);
db.SaveChanges();
}