DBContext.Entry做了什么?

Ida*_*gar 26 asp.net asp.net-mvc entity-framework dbcontext

[HttpPost]
public ActionResult Edit(Movie movie)
{
    if (ModelState.IsValid)
    {
        db.Entry(movie).State = EntityState.Modified;
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(movie);
}
Run Code Online (Sandbox Code Playgroud)

此操作接收电影模型并在数据库中更新它.
但我无法弄清楚如何.
movie对象未附加到db,那么实体框架如何知道db中哪一行应该更新?

我确信Entry方法与它有关,但我真的不知道这个方法的作用.我读到它提供了信息,但是我无法理解如何只更改State一个条目,它将被附加和跟踪DBContext.

Par*_*rma 27

它只是将实体附加到dataContext.否则,您必须使用主键搜索实体,然后编辑该值并保存.

如果您知道某个实体已经存在于数据库中但可能已对其进行了更改,那么您可以告诉上下文附加实体并将其状态设置为Modified. http://msdn.microsoft.com/en-US/data/jj592676

  • 但是为此你有 [Attach](http://msdn.microsoft.com/en-us/library/system.data.entity.dbset.attach(v=vs.103).aspx) 方法。 (3认同)
  • 所以这个方法知道实体类的哪些属性是键,然后可以在内部制定搜索以通过其键获取实体并附加它。对?如果是这样,那就太棒了。 (2认同)
  • @Idan [此处](http://stackoverflow.com/questions/30987806/dbset-attachentity-vs-dbcontext-entryentity-state-entitystate-modified) 的不同之处。 (2认同)