为什么我需要在另一个对象上调用ApplyCurrentValues之前获得一个旧实体

本文关键字:实体 一个 一个对象 ApplyCurrentValues 调用 为什么 | 更新日期: 2023-09-27 18:04:55

看起来这段代码不工作,除非我包括第一行代码片段,这是不是引用之后的任何地方?这是ApplyCurrentValues方法的工作原理吗?

_entities.Contacts.FirstOrDefault(c => c.Id == contactToEdit.Id);
_entities.Contacts.ApplyCurrentValues(contactToEdit);
_entities.SaveChanges();
return RedirectToAction("Index");

此代码编辑联系人记录并保存到数据库。

下面是整个方法:

[HttpPost]
public ActionResult Edit(Contact contactToEdit)
{
    if (!ModelState.IsValid)
    {
        return View();
    }
    try
    {
        _entities.Contacts.FirstOrDefault(c => c.Id == contactToEdit.Id);
        _entities.Contacts.ApplyCurrentValues(contactToEdit);
        _entities.SaveChanges();
        return RedirectToAction("Index");
    }
    catch
    {
        return View();
    }
}

为什么我需要在另一个对象上调用ApplyCurrentValues之前获得一个旧实体

根据我的理解,对象上下文需要知道哪些字段发生了变化。
只有当上下文保存了原始值的记录时,字段才会更新为

第一行似乎有一个副作用,使对象上下文知道的原始值(通过加载实体)。

看看这两个答案。