使用ViewModel和Entity Framework 6更新实体吗?

卡弗曼

我一直在四处张望,却找不到答案。我在“编辑视图”中使用ViewModel,以便可以为某些下拉列表提供值。现在,当我去更新数据库时,我不明白如何更新数据库记录。我猜想我可以创建一个新的实体对象,执行查找,然后根据从Form传入的ViewModel更新每个属性,但是这似乎需要很多手动工作。

在这里,我在“编辑”视图中使用VeiwModel。

@model CPPCustomerCall.ViewModels.CustomerCallVM

这是我的控制器的ActionResult。我将ActionResult的对象类型更改为采用CustomerCallVM,而不是自动生成的CustomerCall。我假设因为“编辑视图”的模型是ViewModel,所以它是ActionResult将接收的对象的类型。但是,我的ViewModel具有更多实体模型不需要的属性来更新记录。如何在此ActionResult中更新数据库记录?

[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Edit([Bind(Include = "Id,CustomerName,Subject,PhoneNumber,CallMessage,CallDate,Status,CallNotes")] CustomerCallVM customerCall)
{
    if (ModelState.IsValid)
    {
        db.Entry(customerCall).State = EntityState.Modified;
        await db.SaveChangesAsync();
        return RedirectToAction("Index");
    }
    return View(customerCall);
}
克里斯·普拉特

首先,Bind视图模型是互斥的。如果您不希望对某些内容进行修改,那么它就不应该放在您的视图模型中。除非视图模型无法直接保存,否则它们会与实体有所不同。结果,您的零件上总会存在一些干预,以将发布的值映射回实体,这意味着您可以有选择地不映射某些不应该存在的属性,无论它们是否已发布。简而言之,摆脱掉那些Bind东西。这只是需要维护的其他内容,并且是大量潜在错误的来源。

也就是说,您拥有的代码是可行的;您只是缺少了将数据从视图模型映射回实体的关键部分。首先,您需要从数据库中获取实体,以便有一个可以使用的基础:

var customerCall = db.CustomerCalls.Find(id);
if (customerCall == null)
{
    return new HttpNotFoundResult();
}

FWIW,根据REST约定,您的编辑路径应在路径中包含ID。并非严格要求遵循REST,但是肯定会建议这样做。虽然坚持使用REST的Web应用程序并不意味着它是一个好的应用程序,但是坚持使用其余部分通常是设计和编码程序设计错误的肯定迹象。

然后,您在属性上进行映射。您可以手动执行以下操作:

customerCall.CustomerName = model.CustomerName;
// etc.

或者,您可以使用AutoMapper之类的库

mapper.Map(model, customerCall);

当然,AutoMapper需要一些初始设置才能使此魔术正常工作,因此,如果您要采用这种方法,请查阅文档。手动映射更容易,但更繁琐且重复。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Entity Framework中使用相关实体更新分离的实体

来自分类Dev

我可以通过实体拆分在Entity Framework 6中延迟加载实体的一部分吗?

来自分类Dev

使用MVC 4和Entity Framework 6访问大型数据库的最佳方法是什么

来自分类Dev

使用Entity Framework Extended的Entity Framework 6批处理更新和AuditLog

来自分类Dev

使用Entity Framework 6从SQL Server保存和检索图像(二进制)

来自分类Dev

如何在Entity Framework 6中混合使用TPH和TPT?

来自分类Dev

使用Entity Framework 6属性,存储行创建日期和上次更新日期

来自分类Dev

使用Entity Framework 6创建计算字段

来自分类Dev

如何使用Entity Framework 6更新多对多关系?

来自分类Dev

我可以使用Entity Framework版本6或7自动更新对象及其子对象吗?

来自分类Dev

使用Entity Framework 6.0删除实体

来自分类Dev

使用System.Data.SQLite和Entity Framework 6的简单示例

来自分类Dev

我可以使用Entity Framework Plus批量更新受保护的属性和类吗?

来自分类Dev

使用Web API中的Entity Framework Core更新以删除并创建实体属性集合

来自分类Dev

我可以使用无键实体类型在Entity Framework Core中查询CHANGETABLE吗?

来自分类Dev

可以在同一项目中使用Entity Framework和Entity Framework Core吗?

来自分类Dev

可以在同一项目中使用Entity Framework和Entity Framework Core吗?

来自分类Dev

实体未使用Entity Framework 6在数据库中更新

来自分类Dev

实体数据源无法与Entity Framework 6升级一起使用

来自分类Dev

结合使用WCF数据服务5.6.0和Entity Framework 6+

来自分类Dev

使用Entity Framework 5错误和DbUpdateConcurrencyException更新记录

来自分类Dev

使用MVC 5和Entity Framework 6进行挣扎

来自分类Dev

使用Entity Framework更新行时发生异常

来自分类Dev

使用Entity Framework 6的多个上下文,跨dbcontexts引用了多个实体

来自分类Dev

Entity Framework 5库使用者需要实体框架dll吗?

来自分类Dev

使用Entity FrameWork 7更新记录

来自分类Dev

使用Entity Framework 6.0删除实体

来自分类Dev

使用SQLite和Entity Framework 6时导航属性错误

来自分类Dev

使用 Entity Framework 6 插入断开的相关实体

Related 相关文章

  1. 1

    在Entity Framework中使用相关实体更新分离的实体

  2. 2

    我可以通过实体拆分在Entity Framework 6中延迟加载实体的一部分吗?

  3. 3

    使用MVC 4和Entity Framework 6访问大型数据库的最佳方法是什么

  4. 4

    使用Entity Framework Extended的Entity Framework 6批处理更新和AuditLog

  5. 5

    使用Entity Framework 6从SQL Server保存和检索图像(二进制)

  6. 6

    如何在Entity Framework 6中混合使用TPH和TPT?

  7. 7

    使用Entity Framework 6属性,存储行创建日期和上次更新日期

  8. 8

    使用Entity Framework 6创建计算字段

  9. 9

    如何使用Entity Framework 6更新多对多关系?

  10. 10

    我可以使用Entity Framework版本6或7自动更新对象及其子对象吗?

  11. 11

    使用Entity Framework 6.0删除实体

  12. 12

    使用System.Data.SQLite和Entity Framework 6的简单示例

  13. 13

    我可以使用Entity Framework Plus批量更新受保护的属性和类吗?

  14. 14

    使用Web API中的Entity Framework Core更新以删除并创建实体属性集合

  15. 15

    我可以使用无键实体类型在Entity Framework Core中查询CHANGETABLE吗?

  16. 16

    可以在同一项目中使用Entity Framework和Entity Framework Core吗?

  17. 17

    可以在同一项目中使用Entity Framework和Entity Framework Core吗?

  18. 18

    实体未使用Entity Framework 6在数据库中更新

  19. 19

    实体数据源无法与Entity Framework 6升级一起使用

  20. 20

    结合使用WCF数据服务5.6.0和Entity Framework 6+

  21. 21

    使用Entity Framework 5错误和DbUpdateConcurrencyException更新记录

  22. 22

    使用MVC 5和Entity Framework 6进行挣扎

  23. 23

    使用Entity Framework更新行时发生异常

  24. 24

    使用Entity Framework 6的多个上下文,跨dbcontexts引用了多个实体

  25. 25

    Entity Framework 5库使用者需要实体框架dll吗?

  26. 26

    使用Entity FrameWork 7更新记录

  27. 27

    使用Entity Framework 6.0删除实体

  28. 28

    使用SQLite和Entity Framework 6时导航属性错误

  29. 29

    使用 Entity Framework 6 插入断开的相关实体

热门标签

归档