使用实体框架仅更新大类的一些属性

时间:2012-02-10 19:39:39

标签: asp.net-mvc-3 entity-framework

情景:

一个巨大的Patient类/实体,拥有大约100个属性。但是在网页中我只需要显示要更新的联系信息(只有大约10个属性)。我/我可以创建一个ViewModel吗?

之前我只使用ViewModel来读取数据。它可以用来更新数据吗?


编辑: 好的,总结一下我到目前为止所发现的内容。

  • 使用AutoMapper将ViewModel(仅包含要更新的属性)映射回原始的大EntityClass。 一个例子是:
EDMX模型中的


    [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设计器中手动执行映射。然后将此简化实体用于患者联系人更新网页。

就个人而言,我觉得必须有更好的方法来做到这一点。有评论吗?

2 个答案:

答案 0 :(得分:0)

我实际上在回到相关主题时发布了一些问题 - question 1和更具体的question 2

我对问题2到目前为止得到的答案并不百分之百,但专家似乎同意使用视图模型是个好主意。例如,它可以帮助您避免手动确保生成的UPDATE语句不会在数据库中覆盖“其他”90属性。

答案 1 :(得分:0)

是保存时只需加载对象,然后使用automapper将属性复制回对象或在EF类上手动设置它们。

EF将知道哪些道具已更改,并且仅为这些已更改的属性发送updatea。