asp.net-mvc - 使用 Automapper 更新现有实体 POCO

标签 asp.net-mvc entity-framework-4 viewmodel automapper dbcontext

我正在使用 EF4 DbContext 为 ASP.NET MVC 应用程序提供模型。我使用 ViewModel 向 View 提供数据,并使用 Automapper 执行 EF POCO 和 ViewModel 之间的映射。 Automapper 做得很好,但我不清楚在 ViewModel 被发送回 Controller 以执行更新后使用它的最佳方式。

我的想法是使用 ViewModel 中包含的键获取 POCO 对象。然后我想使用 Automapper 使用 ViewModel 中的数据更新 POCO:

[HttpPost]
public ActionResult Edit(PatientView viewModel)
{
    Patient patient = db.Patients.Find(viewModel.Id); 
    patient = Mapper.Map<ViewModel, Patient>(viewModel, patient);
    ...
    db.SaveChanges();
    return RedirectToAction("Index");
}

两个问题:
  • Find() 方法返回一个 Proxy 而不是一个导致 Automapper 提示的 POCO。如何获取 POCO 而不是 Proxy?
  • 这是执行更新的最佳做法吗?
  • 最佳答案

    如果您像这样使用 Automapper,它会返回一个新的 Patient 对象,并且不会保留对 Entity Framework 图的引用。你必须像这样使用它:

    [HttpPost]
    public ActionResult Edit(PatientView viewModel)
    {
        Patient patient = db.Patients.Find(viewModel.Id); 
        Mapper.Map(viewModel, patient);
        ...
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    

    关于asp.net-mvc - 使用 Automapper 更新现有实体 POCO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13314666/

    相关文章:

    asp.net-mvc - 如何获取 Azure 自动化客户端的证书

    android - 搜索 Recyclerview - 当搜索为空时滚动到顶部

    javascript - Asp.net MVC 在按钮单击时运行 javascript

    asp.net-mvc - 在MVC Controller 构造函数中获取主机名

    c# - Entity Framework 中两个上下文之间的继承

    c# - ASP.NET C# EF - 选择后如何使整个对象受益?

    c# - Entity Framework 是否使用反射并损害性能?

    asp.net-mvc - 将上下文信息传递给 ASP.NET MVC 中的 View

    asp.net-mvc - MVC 自定义 ViewModel 和自动绑定(bind)

    asp.net-mvc - Azure 每 5 分钟点击一次 Web 应用程序主页