Asp.net mvc 3 使用实体框架只更新大型类的几个属性

Asp.net mvc 3 使用实体框架只更新大型类的几个属性,asp.net-mvc-3,entity-framework,Asp.net Mvc 3,Entity Framework,情景: 一个巨大的患者类/实体,拥有大约100个属性。但在网页中,我只需要显示联系信息(只有大约10个属性)即可更新。我是否可以创建一个ViewModel来执行此操作 我以前只使用ViewModel读取数据。它可以用来更新数据吗 编辑: 好的,总结一下我到目前为止的发现 使用AutoMapper将ViewModel(仅包含要更新的属性)映射回原始的大EntityClass。 例如: [HttpPost] 公共虚拟操作结果编辑(EditUser用户) { var-domain=uow.Us

情景:

一个巨大的
患者
类/实体,拥有大约100个属性。但在网页中,我只需要显示联系信息(只有大约10个属性)即可更新。我是否可以创建一个ViewModel来执行此操作

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


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

  • 使用
    AutoMapper
    将ViewModel(仅包含要更新的属性)映射回原始的大EntityClass。 例如:

[HttpPost]
公共虚拟操作结果编辑(EditUser用户)
{

var-domain=uow.Users.Create();
domain.Id=user.Id;
uow.Users.Update(域);
AutoMapper.Mapper.Map(用户、域);
uow.Save();
返回视图();
}
  • 在EDMX模型中创建另一个名为PatientCommand
的实体,该实体仅包含必要的属性。在EDMX设计器中手动执行映射。然后将此简化实体用于患者联系人更新网页
就我个人而言,我觉得必须有更好的方法来做到这一点。有什么评论吗?

不久前,我在一个相关的话题上发布了几个问题,而且更具体


到目前为止,我对第二个问题的答案不是百分之百满意,但专家们似乎同意使用视图模型是个好主意。首先,它可以避免手动确保生成的UPDATE语句不会覆盖数据库中的“other”90属性。

不久前,我在一个相关主题上发布了几个问题,而且更具体


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

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


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

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


EF将知道哪些道具已更改,并只发送更改属性的updatea。

我已检查AutoMapper,但仍有点犹豫。这是一种广泛使用、安全且良好的做法吗?我想一定有更好的方法。自动制版机很好用,而且被广泛使用。它只是复制属性值。你可以编写自己的代码模板来做类似的事情,也可以使用其他代码生成工具,或者只是手工编写副本。Adam,在你和其他许多帖子建议使用AutoMapper之后,我已经检查了AutoMapper。将实体映射到viewmodel时效果非常好。(从大班到小班)。但是,在保存ViewModel时,反向映射似乎不可能成为一项任务。视图模型仅包含几个属性。许多其他财产需要保持完整。其中一些也存在于复杂的实体中。AutoMapper能够从一个小类映射到一个大的、复杂的类吗?我想如果我们能弄明白这一点,我们会毫不犹豫地接受automapper。在这种情况下,您将加载您的实体和。使用automapper映射到另一个方向,或者调用TryUpdateModel将发布的值与模型合并,然后保存它。我最近遇到了ValueInjector,它在这种情况下可能更容易使用:我已经检查了automapper,但仍然有点犹豫。这是一种广泛使用、安全且良好的做法吗?我想一定有更好的方法。自动制版机很好用,而且被广泛使用。它只是复制属性值。你可以编写自己的代码模板来做类似的事情,也可以使用其他代码生成工具,或者只是手工编写副本。Adam,在你和其他许多帖子建议使用AutoMapper之后,我已经检查了AutoMapper。将实体映射到viewmodel时效果非常好。(从大班到小班)。但是,在保存ViewModel时,反向映射似乎不可能成为一项任务。视图模型仅包含几个属性。许多其他财产需要保持完整。其中一些也存在于复杂的实体中。AutoMapper能够从一个小类映射到一个大的、复杂的类吗?我想如果我们能弄明白这一点,我们会毫不犹豫地接受automapper。在这种情况下,您将加载您的实体和。使用automapper映射到另一个方向,或者调用TryUpdateModel将发布的值与模型合并,然后保存它。我最近遇到了ValueInjector,它在这种情况下可能更容易使用:看起来您的发布并不是真的相关。但是谢谢你提供的信息。@Blaise:对不起!我只是想指出,在HTTPPost中数据返回到服务器的场景中,使用视图模型的优势让我感到困惑(现在仍然如此)。在上面链接的问题2中,我希望得到一个有利于视图模型的好解释,以弥补必须映射回域模型的明显缺点。和你一样,如果没有进一步的信息,我也不想跳到Automapper。我会继续关注你的问题,这样我就能从你得到的答案中获益。看来你的帖子并没有什么关系。但是谢谢你提供的信息。@Blaise:对不起!我只是想指出,在HTTPPost中数据返回到服务器的场景中,使用视图模型的优势让我感到困惑(现在仍然如此)。在上面链接的问题2中,我希望得到一个有利于视图模型的好解释,以弥补必须映射回域模型的明显缺点。和你一样,我不觉得跳到没有毛皮的汽车制造商那里太舒服了

    [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();
}