情景:
一个巨大的Patient
类/实体,拥有大约100个属性。但是在网页中我只需要显示要更新的联系信息(只有大约10个属性)。我/我可以创建一个ViewModel吗?
之前我只使用ViewModel来读取数据。它可以用来更新数据吗?
编辑: 好的,总结一下我到目前为止所发现的内容。
AutoMapper
将ViewModel(仅包含要更新的属性)映射回原始的大EntityClass。
一个例子是:
[HttpPost]
public virtual ActionResult Edit(EditUser user)
{
var domain = uow.Users.Create();
domain.Id = user.Id;
uow.Users.Update(domain);
AutoMapper.Mapper.Map<EditUser, Example.Core.Data.User>(user, domain);
uow.Save();
return View();
}
var domain = uow.Users.Create();
domain.Id = user.Id;
uow.Users.Update(domain);
AutoMapper.Mapper.Map<EditUser, Example.Core.Data.User>(user, domain);
uow.Save();
return View();
}
,仅包含必要的属性。在EDMX设计器中手动执行映射。然后将此简化实体用于患者联系人更新网页。就个人而言,我觉得必须有更好的方法来做到这一点。有评论吗?
答案 0 :(得分:0)
我实际上在回到相关主题时发布了一些问题 - question 1和更具体的question 2。
我对问题2到目前为止得到的答案并不百分之百,但专家似乎同意使用视图模型是个好主意。例如,它可以帮助您避免手动确保生成的UPDATE语句不会在数据库中覆盖“其他”90属性。
答案 1 :(得分:0)
是保存时只需加载对象,然后使用automapper将属性复制回对象或在EF类上手动设置它们。
EF将知道哪些道具已更改,并且仅为这些已更改的属性发送updatea。