调用SaveChanges时,附加实体不会使用新值进行更新

时间:2010-08-22 23:48:27

标签: c# .net entity-framework

这段代码有什么问题吗?我的实体没有得到更新。

public ActionResult UpdateNota(string notas)
{
    if (Request.IsAjaxRequest())
    {
        RegistroEntities registroEntities = new RegistroEntities();
        Nota nota = JsonConvert.DeserializeObject<Nota>(notas);
        registroEntities.AttachTo("Notas",nota);
        registroEntities.ApplyCurrentValues("Notas", nota);
        registroEntities.SaveChanges(SaveOptions.DetectChangesBeforeSave);
        return Json(new {success=true});
    }
    return View();
}

1 个答案:

答案 0 :(得分:1)

查看Entity Framework documentation entitled Working with Objects,特别是Attaching and Detaching Objects上的部分。

在这种情况下,您正在调用AttachTo,这会将实体置于Unchanged状态。

然后你调用ApplyCurrentValues,它将实体中的所有值复制到它自己的值上;任何具有不同值的值都标记为已修改。 (请注意,由于每个值只是复制在自身上,因此 none 具有不同的值,因此实体保持Unchanged状态。

最后,您致电SaveChanges。由于实体处于Unchanged状态,因此无需执行任何操作。

本答案开头的MSDN文档链接包含有关正确执行此操作的方法的信息(请注意,添加实体使用与更新实体不同的解决方案)。